Oracle Text (9i 標準版/企業版內建) 提供強大的全文檢索能力,支援超過 150 種文件格式 (Word、Excel、PDF、HTML、XML 等)。本文示範如何對儲存於 BLOB 欄位的二進制文件建立索引、同步與查詢。
ZYFILEUPZYCONTENT_TABLE (含 BLOB_CONTENT BLOB 欄位)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;
/
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;
NULL_FILTER,二進制用 INSO_FILTER,混合儲存建議同用 INSO_FILTER 或分表索引。SELECT name
FROM zycontent_table
WHERE CONTAINS(blob_content, '教育資訊化', 1) > 0
ORDER BY name;
CONTAINS 支援邏輯運算 (AND/OR)、近接查詢 (NEAR)、排除 (NOT/~)、多語言擴展查詢。
FILE_DATASTORE)。Oracle Text 為企業非結構化資料提供企業級全文檢索方案。正確配置 Lexer、Wordlist、Filter 並定期同步索引,可滿足大多數文件搜尋需求。針對特殊格式 (如 RTF) 需提前驗證相容性。