yangtingkun
===========================================================
ORACLE TEXT SECTION GROUP PREFERENCE(四)
===========================================================

这篇文章介绍Oracle全文索引的SECTION GROUP属性中的XML_SECTION_GROUP。


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来检索标签属性中的内容。

文档内容如下:

<?xml version="1.0" standalone="yes" ?>
<!-- Copyright (c) 2001 Oracle Corporation. All rights Reserved -->
<!-- Do not modify the contents of this file by hand. -->
<COMP_CONTEXT>
<VAR_LIST SIZE="0">
<VAR NAME="PROD_HOME" TYPE="String" DESC_RES_ID="" SECURE="F" VAL="F:oracleoracle920oracle_java_jdbc_jdbc_common" ADV="F"/>
</VAR_LIST>
<CONST_LIST SIZE="10">
<CONST NAME="Minimal" PLAT_SP="F" TYPE="String" TRANS="T" VAL="Minimal_ALL"/>
<CONST NAME="COMPONENT_DESC" PLAT_SP="F" TYPE="String" TRANS="T" VAL="COMPONENT_DESC_ALL"/>
<CONST NAME="Custom_DESC" PLAT_SP="F" TYPE="String" TRANS="T" VAL="Custom_DESC_ALL"/>
<CONST NAME="Typical_DESC" PLAT_SP="F" TYPE="String" TRANS="T" VAL="Typical_DESC_ALL"/>
<CONST NAME="Complete" PLAT_SP="F" TYPE="String" TRANS="T" VAL="Complete_ALL"/>
<CONST NAME="Custom" PLAT_SP="F" TYPE="String" TRANS="T" VAL="Custom_ALL"/>
<CONST NAME="COMPONENT_NAME" PLAT_SP="F" TYPE="String" TRANS="F" VAL="JDBC Common Files"/>
<CONST NAME="Minimal_DESC" PLAT_SP="F" TYPE="String" TRANS="T" VAL="Minimal_DESC_ALL"/>
<CONST NAME="Typical" PLAT_SP="F" TYPE="String" TRANS="T" VAL="Typical_ALL"/>
<CONST NAME="Complete_DESC" PLAT_SP="F" TYPE="String" TRANS="T" VAL="Complete_DESC_ALL"/>
</CONST_LIST>
</COMP_CONTEXT>

如果建立不同的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

yangtingkun 发表于:2006.08.20 22:59 ::分类: ( ORACLE ) ::阅读:(559次) :: 评论 (0)

发表评论
标题

在此添加评论
表情符号: smile laughing tongue angry crying sad wassat wink

称呼

邮箱地址(可选)

个人主页(可选)

 authimage


切换风格
新闻聚合
博客日历
文章归档...
最新发表...
最新评论...
最多阅读文章...
最多评论文章...
博客统计...
Blog信息
网站链接...