这篇文章介绍Oracle全文索引的SECTION GROUP属性中的BASIC_SECTION_GROUP。[@more@]NULL_SECTION_GROUP 其实并不真正支持节搜索,而在支持节搜索的SECTION_GROUP中,BASIC_SECTION_GROUP是最基础的一种属性,它只支持以开头以结尾的结构的文档。这篇文章在介绍BASIC_SECTION_GROUP的同时,简单介绍一下节搜索。
SQL> CREATE TABLE T (ID NUMBER, DOCS VARCHAR2(1000));
Table created.
SQL> INSERT INTO T VALUES (1, 'TITLE
2 This is the contents of the example.
3 Use this example to test the basic_section_group.');
1 row created.
SQL> INSERT INTO T VALUES (2, 'EXAMPLE
2 This line incluing the word title too.');
1 row created.
SQL> COMMIT;
Commit complete.
SQL> CREATE INDEX IND_T_DOCS ON T(DOCS) INDEXTYPE IS CTXSYS.CONTEXT;
Index created.
SQL> SELECT ID FROM T WHERE CONTAINS (DOCS, 'HEADING') > 0;
ID
----------
1
2
在HTML、XML等类似结构的文档中,除了用来显示的内容外,还包括了大量用于控制结构的标识,而这些标识可能是不希望被索引的,而这就是SECTION GROUP其中的一个主要功能。
在上面的例子中,默认情况(NULL_SECTION_GROUP)肯定会将HEADING放入到索引键值中,但如果建立了BASIC_SECTION_GROUP则在
查询文档的时候,HEADING、CONTEXT等标签内容将不再被索引
SQL> DROP INDEX IND_T_DOCS;
Index dropped.
SQL> exec CTX_DDL.CREATE_SECTION_GROUP('TEST_BASIC', 'BASIC_SECTION_GROUP');
PL/SQL procedure successfully completed.
SQL> CREATE INDEX IND_T_DOCS ON T(DOCS) INDEXTYPE IS CTXSYS.CONTEXT
2 PARAMETERS ('SECTION GROUP TEST_BASIC');
Index created.
SQL> SELECT ID FROM T WHERE CONTAINS (DOCS, 'HEADING') > 0;
no rows selected
SQL> SELECT ID FROM T WHERE CONTAINS (DOCS, 'USE') > 0;
ID
----------
1
节搜索的另一个主要功能就是可以限制查询的范围。如果上面的例子中,文档包含了两部分,标题和正文,其中标题使用标签
和,正文使用标签和。因此,可以对BASIC_SECTION_GROUP添加区域属性,运行查询在文档的某个范围内进行。
SQL> DROP INDEX IND_T_DOCS;
Index dropped.
SQL> exec CTX_DDL.ADD_ZONE_SECTION('TEST_BASIC', 'HEAD', 'HEADING');
PL/SQL procedure successfully completed.
SQL> CREATE INDEX IND_T_DOCS ON T(DOCS) INDEXTYPE IS CTXSYS.CONTEXT
2 PARAMETERS ('SECTION GROUP TEST_BASIC');
Index created.
SQL> SELECT ID FROM T WHERE CONTAINS (DOCS, 'TITLE') > 0;
ID
----------
1
2
SQL> SELECT ID FROM T WHERE CONTAINS (DOCS, 'TITLE WITHIN HEAD') > 0;
ID
----------
1
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/271283/viewspace-1022448/
,如需转载,请注明出处,否则将追究法律责任。