Oracle全文檢索配置與實踐


    在Web項目中使用Oracle全文檢索的話,首先要進行Oracle數據庫相關表的全文檢索配置,所做的准備工作就是要給當前使用用戶賦予ctx_ddl包操作權限,有了權限才能進行所要操作表的全文檢索配置,接下來看一下具體的配置方法。

1、創建分析器。

    分析器就是用來將需要檢索的記錄,按照一定的方式進行詞組拆分,然后存放在索引表中。檢索的時候根據索引表中存放的拆分詞組,對傳入的關鍵字進行匹配,並返回匹配結果。

    oracle text中的分析器有3種:

    (1)basic_lexer:只能根據空格和標點來進行拆分。

    (2)chinese_vgram_lexer:專門的漢語分析器,按字單元進行拆分。這種方式的好處是能夠將所有有可能的詞組全部保存進索引表,使得數據不會遺漏。

    (3)chinese_lexer:一種新的漢語分析器,能夠認識大部分常用的漢語詞匯,並按常用詞匯進行拆分存儲。

    每一種分析器都有它最適合的應用環境,這個要根據自己數據庫的編碼方式和數據存儲情況進行選擇。

    我的表結構如下圖:

我要對info字段進行全文檢索,info字段中大多存儲的時中文介紹信息,選擇chinese_vgram_lexer分析器最合適,創建分析器的命令:

exec ctx_ddl.create_preference ('my_lexer','chinese_vgram_lexer');

或者:

beigin 

ctx_ddl.create_preference ('my_lexer','chinese_vgram_lexer');

end;

接下來如果根據項目需求需要過濾詞組的話再進行創建過濾詞組,不需要的話就可以忽略了。

2、創建索引

    我要對TOUR_STRATEGY表中的info字段進行檢索,接下來就要對info字段建立索引,建立索引的命令:

create index TOUR_STRATEGY_INDEX on TOUR_STRATEGY(info) indextype is CTXSYS.CONTEXT parameters('lexer my_lexer ');

索引創建成功以后,就可以在項目中使用了。

select * from tour_strategy where contains(info,'乘物')>0;

3、索引與數據變化同步

當我們需要修改tour_strategy表中的數據,比如添加、刪除、更新等操作時,TOUR_STRATEGY_INDEX索引是不會同步更新數據的,需要我們在程序中手動的更新,可以寫一個oracle的觸發器,當添加、刪除、修改操作時,進行索引更新。也可以定時進行更新。更新命令:

exec ctx_ddl.sync_index('yu_test_index');

或者:

begin

ctx_ddl.sync_index('yu_test_index');

end;

另外,如果前面創建全文索引的時候帶上了參數“sync(on commit)”,則同步不需要手工去執行,當數據變動時,會自動進行同步操作;操作命令:

 create index TOUR_STRATEGY_INDEX on TOUR_STRATEGY(info) indextype is CTXSYS.CONTEXT parameters('lexer my_lexer sync(on commit)');


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM