全文索引查询模板的使用

王朝other·作者佚名  2008-05-31
窄屏简体版  字體: |||超大  

Oracle全文索引的查询模板功能可以对在CONTEXT索引上使用CATSEARCH语法,或者在CTXCAT索引上使用CONTAINS语法。

通过一个例子说明查询模板的使用:

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

表已创建。

SQL> INSERT INTO T VALUES (1, 'IT IS A EXAMPLE FOR QUERY TEMPLETE.');

已创建 1 行。

SQL> INSERT INTO T VALUES (2, 'USING THE TEMPLETE CONTAIN OPERATION CAN BE PERFORM ON CTXCAT INDEX.');

已创建 1 行。

SQL> INSERT INTO T VALUES (3, 'AND THE CATSEARCH OPERATION CAN BE PERFORM ON CONTENT INDEX.');

已创建 1 行。

SQL> COMMIT;

提交完成。

SQL> CREATE INDEX IND_T_DOCS ON T(DOCS) INDEXTYPE IS CTXSYS.CONTEXT;

索引已创建。

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

ID

----------

2

1

SQL> SELECT ID FROM T WHERE CONTAINS(DOCS, '<QUERY>

2 <TEXTQUERY GRAMMAR="CTXCAT">

3 TEMPLETE

4 </TEXTQUERY>

5 <SCORE DATATYPE="INTEGER"/>

6 </QUERY>', 1) > 0;

ID

----------

2

1

上面这个给出了对于CONTEXT索引使用CATSEARCH语法的例子,不过这种用途的实际意义不大,不过下面的例子的实际意义就比较大了:

SQL> DROP INDEX IND_T_DOCS;

索引已丢弃。

SQL> CREATE INDEX IND_T_DOCS ON T(DOCS) INDEXTYPE IS CTXSYS.CTXCAT;

索引已创建。

SQL> SELECT ID FROM T WHERE CATSEARCH(DOCS, '$USE', NULL) > 0;

未选定行

SQL> SELECT ID FROM T WHERE CATSEARCH(DOCS, '<QUERY>

2 <TEXTQUERY GRAMMAR="CONTEXT">

3 $USE

4 </TEXTQUERY>

5 <SCORE DATATYPE="INTEGER"/>

6 </QUERY>', NULL) > 0;

ID

----------

2

SQL> SELECT ID FROM T WHERE CATSEARCH(DOCS, ';((EXAMPLE, TEMPLETE), 3)', NULL) > 0;

未选定行

SQL> SELECT ID FROM T WHERE CATSEARCH(DOCS, ';((EXAMPLE, TEMPLETE), 3)', NULL) > 0;

未选定行

SQL> SELECT ID FROM T WHERE CATSEARCH(DOCS, '<QUERY>

2 <TEXTQUERY GRAMMAR="CONTEXT">

3 ;((EXAMPLE, TEMPLETE), 3)</TEXTQUERY>

4 <SCORE DATATYPE="INTEGER"/>

5 </QUERY>', NULL) > 0;

ID

----------

1

CATSEARCH语法本身不支持ABOUT、STEM、FUZZY、NEAR等操作,但是使用了查询模板,这些本来CONTAINS语法才支持的操作都可以在CTXCAT索引上使用了。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航