全文索引查询模板的使用

2/9/2008来源:Oracle教程人气:6182


  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索引上使用了。