oracle全文索引之SECTION GROUP_4_XML_SECTION_GROUP

jolly10發表於2009-05-25
這篇文章介紹Oracle全文索引的SECTION GROUP屬性中的XML_SECTION_GROUP。[@more@]

Oracle對HTML文件預定義了專門的HTML_SECTION_GROUP,而對XML文件,也預定義好了專門的SECTION_GROUP——XML_SECTION_GROUP。

其實,Oracle除了XML_SECTION_GROUP外,AUTO_SECTION_GROUP和PATH_SECTION_GROUP也都是為XML文件預定義的,不過,這篇文件先只討論XML_SECTION_GROUP。

XML文件的格式要求比HTML文件嚴謹、規範,這也使得XML_SECTION_GROUP比HTML_SECTION_GROUP增加了新的功能,比如ATTRIBUTE的搜尋。

如果一篇結構型別下面例子中的文件,使用HTML_SCTION_GROUP和BASIC_SECTION_GROUP都是無法索引到內容的,只能透過XML_SECTION_GROUP的ATTR_SECTION來檢索標籤屬性中的內容。

文件內容如下:


<!-- Copyright (c) 2001 Oracle Corporation. All rights Reserved --&gt
<!-- Do not modify the contents of this file by hand. --&gt
















如果建立不同的HTML_SECTION_GROUP或XML_SECTION_GROUP是檢索不到內容的:

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

表已建立。

SQL> INSERT INTO T VALUES (1, 'context.xml');

已建立 1 行。

SQL> COMMIT;

提交完成。

SQL> CONN CTXSYS/CTXSYS@YANGTK
已連線。
SQL> BEGIN
2 CTX_DDL.CREATE_PREFERENCE('TEST_FILE', 'FILE_DATASTORE');
3 CTX_DDL.SET_ATTRIBUTE('TEST_FILE', 'PATH', 'F:');
4 CTX_DDL.CREATE_SECTION_GROUP('TEST_HTML', 'HTML_SECTION_GROUP');
5 CTX_DDL.CREATE_SECTION_GROUP('TEST_XML', 'XML_SECTION_GROUP');
6 END;
7 /

PL/SQL 過程已成功完成。

SQL> CONN YANGTK/YANGTK@YANGTK
已連線。
SQL> CREATE INDEX IND_T_DOCS ON T (DOCS) INDEXTYPE IS CTXSYS.CONTEXT
2 PARAMETERS('DATASTORE CTXSYS.TEST_FILE FILTER CTXSYS.NULL_FILTER
3 SECTION GROUP CTXSYS.TEST_HTML');

索引已建立。

SQL> SELECT * FROM T WHERE CONTAINS (DOCS, 'COMPLETE') > 0;

未選定行

SQL> DROP INDEX IND_T_DOCS;

索引已丟棄。

SQL> CREATE INDEX IND_T_DOCS ON T (DOCS) INDEXTYPE IS CTXSYS.CONTEXT
2 PARAMETERS('DATASTORE CTXSYS.TEST_FILE FILTER CTXSYS.NULL_FILTER
3 SECTION GROUP CTXSYS.TEST_XML');

索引已建立。

SQL> SELECT * FROM T WHERE CONTAINS (DOCS, 'COMPLETE') > 0;

未選定行

SQL> DROP INDEX IND_T_DOCS;

索引已丟棄。

對於XML_SECTION_GROUP可以建立ATTRIBUTE節組:

SQL> CONN CTXSYS/CTXSYS@YANGTK
已連線。
SQL> BEGIN
2 CTX_DDL.ADD_ATTR_SECTION('TEST_HTML', 'NAME', 'CONST@NAME');
3 END;
4 /
BEGIN
*
ERROR 位於第 1 行:
ORA-20000: Oracle Text 錯誤:
DRG-12225: 這一段型別不能新增到此段組中
ORA-06512: 在"CTXSYS.DRUE", line 157
ORA-06512: 在"CTXSYS.CTX_DDL", line 314
ORA-06512: 在line 2


SQL> BEGIN
2 CTX_DDL.ADD_ATTR_SECTION('TEST_XML', 'NAME', 'CONST@NAME');
3 END;
4 /

PL/SQL 過程已成功完成。

SQL> CONN YANGTK/YANGTK@YANGTK
已連線。
SQL> CREATE INDEX IND_T_DOCS ON T (DOCS) INDEXTYPE IS CTXSYS.CONTEXT
2 PARAMETERS('DATASTORE CTXSYS.TEST_FILE FILTER CTXSYS.NULL_FILTER
3 SECTION GROUP CTXSYS.TEST_XML');

索引已建立。

SQL> SELECT * FROM T WHERE CONTAINS (DOCS, 'COMPLETE WITHIN NAME') > 0;

ID DOCS
---------- ----------------------------------------
1 context.xml

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/271283/viewspace-1022451/,如需轉載,請註明出處,否則將追究法律責任。

相關文章