Oracle Text (原 InterMedia) 提供強大的全文檢索能力。建立中文全文索引的關鍵在於**斷詞器** 選擇。本文依官方最佳實務,拆解五大步驟並詳細比較三種中文斷詞器優劣。
CTXSYS 使用者與 CTXAPP 角色)。CTXSYS 帳號鎖定,需解鎖:ALTER USER ctxsys ACCOUNT UNLOCK IDENTIFIED BY password;GRANT EXECUTE ON ctx_ddl TO your_app_user;
斷詞器決定「詞條」切分方式,直接影響檢索精準度與效能。
| 斷詞器 | 適用語系 | 字符集支援 | 切分邏輯 | 優點 | 缺點 |
|---|---|---|---|---|---|
| BASIC_LEXER | 英文 | 所有 | 空格/標點切分,濾除停用詞 | 效率高 | 中文無空格會整句當一詞,失效 |
| CHINESE_VGRAM_LEXER | 中文 | ZHS16GBK, UTF8 等主流 | N-gram (Bigram) 滑動視窗 | 無需詞庫、召回率高 | 產生大量無意義詞條 (如「民站」)、索引大、效率低 |
| CHINESE_LEXER | 中文 | **僅 UTF8** | 內建詞庫切分 | 切分精準、索引小、速度快 | 僅限 UTF8 資料庫 |
-- 使用 VGRAM (相容舊字符集)
EXEC ctx_ddl.create_preference('my_lexer', 'CHINESE_VGRAM_LEXER');
-- 或使用新式 CHINESE_LEXER (需 UTF8)
EXEC ctx_ddl.create_preference('my_lexer', 'CHINESE_LEXER');
CREATE INDEX idx_doc_content ON documents(content)
INDEXTYPE IS CTXSYS.CONTEXT
PARAMETERS ('LEXER my_lexer SYNC (ON COMMIT)');
SYNC (ON COMMIT):交易提交時自動同步索引,適合低頻寫入;高頻寫入建議 SYNC (EVERY "NEXT_DAY(TRUNC(SYSDATE)+1/24)") 定時同步。LOCAL 關鍵字建立分區索引。SELECT * FROM documents
WHERE CONTAINS(content, '上傳 圖片', 1) > 0
ORDER BY SCORE(1) DESC;
CONTAINS 回傳分數,配合 SCORE 排序。%、近鄰 NEAR、模糊 FUZZY 等。