首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

Oracle Text 建立二進制檔案全文索引完整指南

     編輯:Oracle 資料庫相關知識

前言

Oracle Text (9i 標準版/企業版內建) 提供強大的全文檢索能力,支援超過 150 種文件格式 (Word、Excel、PDF、HTML、XML 等)。本文示範如何對儲存於 BLOB 欄位的二進制文件建立索引、同步與查詢。

環境準備

  • Schema: ZYFILEUP
  • Table: ZYCONTENT_TABLE (含 BLOB_CONTENT BLOB 欄位)

步驟一:授與 CTXAPP 角色與執行權限

GRANT CTXAPP TO ZYFILEUP;
ALTER USER ZYFILEUP DEFAULT ROLE ALL;
GRANT EXECUTE ON CTXSYS.CTX_ADM TO ZYFILEUP;
GRANT EXECUTE ON CTXSYS.CTX_CATSEARCH TO ZYFILEUP;
GRANT EXECUTE ON CTXSYS.CTX_CONTAINS TO ZYFILEUP;
GRANT EXECUTE ON CTXSYS.CTX_DDL TO ZYFILEUP;
GRANT EXECUTE ON CTXSYS.CTX_DOC TO ZYFILEUP;
GRANT EXECUTE ON CTXSYS.CTX_QUERY TO ZYFILEUP;
GRANT EXECUTE ON CTXSYS.CTX_ULEXER TO ZYFILEUP;
GRANT EXECUTE ON CTXSYS.CTX_XPCONTAINS TO ZYFILEUP;

步驟二:建立索引偏好設定

BEGIN
    CTX_DDL.CREATE_PREFERENCE('mylex', 'BASIC_LEXER');
    CTX_DDL.SET_ATTRIBUTE('mylex', 'PRINTJOINS', '_-');
    CTX_DDL.CREATE_PREFERENCE('mywordlist', 'BASIC_WORDLIST');
    CTX_DDL.SET_ATTRIBUTE('mywordlist', 'PREFIX_INDEX', 'TRUE');
    CTX_DDL.SET_ATTRIBUTE('mywordlist', 'PREFIX_MIN_LENGTH', 1);
    CTX_DDL.SET_ATTRIBUTE('mywordlist', 'PREFIX_MAX_LENGTH', 5);
    CTX_DDL.SET_ATTRIBUTE('mywordlist', 'SUBSTRING_INDEX', 'YES');
END;
/
BEGIN
    CTX_DDL.CREATE_PREFERENCE('cnlex', 'CHINESE_LEXER');
END;
/

步驟三:建立 Context 索引

DROP INDEX i_zycontent_table FORCE;
CREATE INDEX i_zycontent_table ON zycontent_table(blob_content)
INDEXTYPE IS CTXSYS.CONTEXT
PARAMETERS (
    'DATASTORE CTXSYS.DIRECT_DATASTORE
     FILTER CTXSYS.INSO_FILTER
     LEXER ZYFILEUP.CNLEX
     WORDLIST ZYFILEUP.MYWORDLIST'
);
  • DIRECT_DATASTORE:直接從 BLOB 讀取;
  • INSO_FILTER:支援二進制格式過濾 (Office、PDF 等);
  • CHINESE_LEXER:中文分詞器;
  • BASIC_WORDLIST:啟用前綴/子字串索引,提升模糊查詢效能。

步驟四:索引同步與刪除

同步索引 (增量更新)

-- 方法 1
ALTER INDEX i_zycontent_table REBUILD PARAMETERS('RESUME MEMORY 20M');
-- 方法 2 (推薦)
EXEC CTX_DDL.SYNC_INDEX('i_zycontent_table', '20M');

刪除索引

DROP INDEX i_zycontent_table FORCE;

索引功能特色

  1. 支援格式:150+ 格式,含 MS Office、PDF、HTML、XML、RTF (註: 實測 RTF 可能無法索引,需驗證)。
  2. 過濾器選擇:純文本用 NULL_FILTER,二進制用 INSO_FILTER,混合儲存建議同用 INSO_FILTER 或分表索引。
  3. 多語言詞典:可自訂同義詞、層級關係,支援跨語言查詢 (中/日/韓/西語)。

查詢語法範例

SELECT name
FROM zycontent_table
WHERE CONTAINS(blob_content, '教育資訊化', 1) > 0
ORDER BY name;

CONTAINS 支援邏輯運算 (AND/OR)、近接查詢 (NEAR)、排除 (NOT/~)、多語言擴展查詢。

實務經驗分享

  • Word、Excel、PPT、HTML、PDF 中文文件索引效果優異;
  • RTF 格式在 Win2000/XP + 9i 環境下多次測試無法檢索,原因待查;
  • Oracle Text 可對檔案系統中的文件建立索引,無須載入資料庫 (使用 FILE_DATASTORE)。

結語

Oracle Text 為企業非結構化資料提供企業級全文檢索方案。正確配置 Lexer、Wordlist、Filter 並定期同步索引,可滿足大多數文件搜尋需求。針對特殊格式 (如 RTF) 需提前驗證相容性。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved