ITPub博客

首页 > 数据库 > Oracle > oracle全文索引之SECTION GROUP_6_PATH_SECTION_GROUP

oracle全文索引之SECTION GROUP_6_PATH_SECTION_GROUP

原创 Oracle 作者:jolly10 时间:2009-05-25 12:32:11 0 删除 编辑
这篇文章介绍Oracle全文索引的SECTION GROUP属性中的PATH_SECTION_GROUP。[@more@]

PATH_SECTION_GROUP 的功能和AUTO_SECTION_GROUP十分类似,PATH_SECTION_GROUP比AUTO_SECTION_GROUP增加了 HASPATH和INPATH操作,但是PATH_SECTION_GROUP不支持ADD_STOP_SECTION属性。

下面通过一个例子简单描述一下PATH_SECTION_GROUP以及HASPATH和INPATH功能。

SQL> CREATE TABLE T (ID NUMBER, DOCS VARCHAR2(1000));

表已创建。

SQL> INSERT INTO T VALUES (1, '
2
3
4
5
6

7
8
9
10
11
12 Receive File Directory
13

14

15

16
17

18 ');

已创建 1 行。

SQL> COMMIT;

提交完成。

SQL> CREATE INDEX IND_T_DOCS ON T (DOCS) INDEXTYPE IS CTXSYS.CONTEXT
2 PARAMETERS ('SECTION GROUP CTXSYS.PATH_SECTION_GROUP');

索引已创建。

AUTO_SECTION_GROUP支持的自动节组属性,PATH_SECTION_GROUP同样支持:

SQL> SELECT ID FROM T WHERE CONTAINS(DOCS, 'COLLECTOR') > 0;

ID
----------
1

SQL> SELECT ID FROM T WHERE CONTAINS(DOCS, 'COLLECTOR WITHIN Display') > 0;

ID
----------
1

PATH_SECTION_GROUP还支持HASPATH和INPATH操作:

SQL> SELECT ID FROM T WHERE CONTAINS(DOCS, 'HASPATH(Display)') > 0;

未选定行

SQL> SELECT ID FROM T WHERE CONTAINS(DOCS, 'HASPATH(TargetMetadata/Display)') > 0;

ID
----------
1

SQL> SELECT ID FROM T
2 WHERE CONTAINS(DOCS, 'HASPATH(TargetMetadata/Display/Label="CSA COLLECTOR")') > 0;

ID
----------
1

HASPATH 操作用来判断指定的路径在文档中是否存在。上面的三个查询中,第一个没有查询到内容是因为Display节组不是文档中最顶层的节组。第二个查询到内容是 由于TargetMetadata是最顶层的节组,且TargetMetadata/Display路径存在。第三个查询展示了对于指定路径下的指定内容 是否存在的查询。

SQL> SELECT ID FROM T WHERE CONTAINS(DOCS, 'COLLECTOR INPATH(TargetMetadata)') > 0;

ID
----------
1

SQL> SELECT ID FROM T WHERE CONTAINS(DOCS, 'COLLECTOR INPATH(Display)') > 0;

未选定行

SQL> SELECT ID FROM T WHERE CONTAINS(DOCS, 'COLLECTOR INPATH(//Display)') > 0;

ID
----------
1

INPATH操作和WITHIN操作比较类似,都是在指定的节组中进行查询。

由于Display不是顶层的节组,因此上面的第二个查询没有返回结果,而需要采用第三个查询。

SQL> SELECT ID FROM T
2 WHERE CONTAINS(DOCS, 'RECVFILEDIR INPATH(//InstanceProperty/@NAME)') > 0;

ID
----------
1

SQL> SELECT ID FROM T
2 WHERE CONTAINS(DOCS, 'RECEIVE INPATH(//Display[ShortName="Receive File Directory"])') > 0;

ID
----------
1

SQL> SELECT ID FROM T
2 WHERE CONTAINS(DOCS, 'RECEIVE INPATH(//InstanceProperties[.//ShortName="Receive File Directory"])') > 0;

ID
----------
1

最后列出了几个使用INPATH操作的复杂的查询,这里就不再一一解释了。通过上面的几个例子可以看出,使用INPATH操作比使用WITHIN更加的灵活。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/271283/viewspace-1022453/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2008-02-20

  • 博文量
    263
  • 访问量
    769016