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