首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 資料庫基礎

Oracle Text 全文索引建立五步驟:從角色設定到中文斷詞器選擇

     編輯:Oracle 資料庫基礎

前言

Oracle Text (原 InterMedia) 提供強大的全文檢索能力。建立中文全文索引的關鍵在於**斷詞器** 選擇。本文依官方最佳實務,拆解五大步驟並詳細比較三種中文斷詞器優劣。

步驟 1:檢查並啟用 CTXSYS 角色

  • 確認資料庫已安裝 Oracle Text 組件 (含 CTXSYS 使用者與 CTXAPP 角色)。
  • 預設 CTXSYS 帳號鎖定,需解鎖:ALTER USER ctxsys ACCOUNT UNLOCK IDENTIFIED BY password;

步驟 2:授予執行權限

GRANT EXECUTE ON ctx_ddl TO your_app_user;

步驟 3:建立與選擇斷詞器 — 核心決策

斷詞器決定「詞條」切分方式,直接影響檢索精準度與效能。

斷詞器適用語系字符集支援切分邏輯優點缺點
BASIC_LEXER英文所有空格/標點切分,濾除停用詞效率高中文無空格會整句當一詞,失效
CHINESE_VGRAM_LEXER中文ZHS16GBK, UTF8 等主流N-gram (Bigram) 滑動視窗無需詞庫、召回率高產生大量無意義詞條 (如「民站」)、索引大、效率低
CHINESE_LEXER中文**僅 UTF8**內建詞庫切分切分精準、索引小、速度快僅限 UTF8 資料庫

建立 Preference 範例

-- 使用 VGRAM (相容舊字符集)
EXEC ctx_ddl.create_preference('my_lexer', 'CHINESE_VGRAM_LEXER');

-- 或使用新式 CHINESE_LEXER (需 UTF8)
EXEC ctx_ddl.create_preference('my_lexer', 'CHINESE_LEXER');

步驟 4:建立全文索引

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 關鍵字建立分區索引。

步驟 5:使用 CONTAINS 查詢

SELECT * FROM documents
WHERE CONTAINS(content, '上傳 圖片', 1) > 0
ORDER BY SCORE(1) DESC;
  • CONTAINS 回傳分數,配合 SCORE 排序。
  • 查詢語法支援 AND/OR/NOT、通配符 %、近鄰 NEAR、模糊 FUZZY 等。

四大索引類型補充

  • CONTEXT:標準全文索引,支援大文件、評分、同步控制,最常用。
  • CTXCAT:針對小文件/欄位組合,交易提交即時可見,適合電商商品屬性搜尋。
  • CTXRULE:文檔分類/路由,預先定義規則匹配新文檔。
  • CTXXPATH:XML 路徑加速 (12c 後建議改用 XMLIndex)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved