查詢模板允許:
打破索引類型與查詢語法的綁定,極大提升開發靈活性。
CREATE TABLE t (id NUMBER, docs VARCHAR2(1000));
INSERT INTO t VALUES (1, 'IT IS A EXAMPLE FOR QUERY TEMPLATE.');
INSERT INTO t VALUES (2, 'USING THE TEMPLATE CONTAIN OPERATION CAN BE PERFORMED ON CTXCAT INDEX.');
INSERT INTO t VALUES (3, 'AND THE CATSEARCH OPERATION CAN BE PERFORMED ON CONTEXT INDEX.');
COMMIT;
CREATE INDEX ind_t_docs ON t(docs) INDEXTYPE IS CTXSYS.CONTEXT;
-- 標準 CONTAINS 查詢
SELECT id FROM t WHERE CONTAINS(docs, 'TEMPLATE', 1) > 0; -- 返回 1,2
-- 查詢模板:在 CONTEXT 上用 CATSEARCH 語法(實際意義有限,演示語法)
SELECT id FROM t WHERE CONTAINS(docs, ' 2 3 TEMPLATE 4 5 6 ', 1) > 0; -- 同樣返回 1,2
DROP INDEX ind_t_docs;
CREATE INDEX ind_t_docs ON t(docs) INDEXTYPE IS CTXSYS.CTXCAT;
-- 原生 CATSEARCH 不支援 ABOUT/STEM/FUZZY/NEAR
SELECT id FROM t WHERE CATSEARCH(docs, '$USE', NULL) > 0; -- 0 行
SELECT id FROM t WHERE CATSEARCH(docs, ' 2 3 $USE 4 5 6 ', NULL) > 0; -- 返回 2
-- 查詢模板:在 CTXCAT 上用 CONTAINS 語法,啟用高級操作
-- 範例:NEAR 操作(詞項邻近)
SELECT id FROM t WHERE CATSEARCH(docs, ' 2 3 ;((EXAMPLE, TEMPLATE), 3) 4 5 ', NULL) > 0;
-- 返回 1:EXAMPLE 與 TEMPLATE 距離 ≤ 3 詞
關鍵語法:CATSEARCH(column, ' 2 3 <CONTAINS語法> 4 5 ', NULL) 中的 2 3 ... 4 5 為固定包裹格式。
| 操作 | CONTAINS 原生 | CATSEARCH 原生 | 查詢模板啟用 |
|---|---|---|---|
| ABOUT (主題擴展) | ✓ | ✗ | CTXCAT 上 ✓ |
| STEM (詞幹擴展) | ✓ | ✗ | CTXCAT 上 ✓ |
| FUZZY (模糊匹配) | ✓ | ✗ | CTXCAT 上 ✓ |
| NEAR (鄰近查詢) | ✓ | ✗ | CTXCAT 上 ✓ |
| THESAURUS (同義詞) | ✓ | ✗ | CTXCAT 上 ✓ |
DROP INDEX 載入後 CREATE INDEX,或用 CTX_DDL.SYNC_INDEX 批量同步。