oracle全文索引之SECTION GROUP_6_PATH_SECTION_GROUP

jolly10發表於2009-05-25
這篇文章介紹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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章