oracle全文索引(全文檢索)的介紹,使用和創

2021-08-09 07:11:09 字數 2570 閱讀 7427

全文索引

背景介紹:很多時候需要根據key words關鍵字去匹配對應的值,對於大量的資料而已,如果使用like,或者instr函式,速度則會很慢,這個時候,全文檢索對比其他的模糊查詢,有著明顯的速度優勢。但是因為分詞,所以會占用的一定的空間。如果空間足夠以及對速度有一樣的需求,可以考慮全文檢索。根據自身的需求而定。

oracle的全文檢索實現邏輯,通過

lexer

詞法分析器,講把值的

term

找出來。記錄在一組的

dr$開頭的表

裡面(主要是dr$***i表),主要記錄

term

的位置,

frequency

頻率,hash

等資訊,

oracle

根據謂詞,找到對應的

term。

主要介紹三種自然語言的分析器

basic_lexer

(預設的分析器)

:主要針對英語。有較高的處理效率

,因為它只認空格和標點,所以對於漢語沒有空格的情況不會分詞

chinese_vgram_lexer

: 專用漢語分析器,支援所有漢字字符集(

zhs16cgb231280 zhs16gbk zht32euc zht16big5 zht32tris zht16mswin950 zht16hkscs utf8

)因為採用了分詞的方法,可以查到所有的分詞

,效率差

chinese_lexer

: 新漢語分析器,只支援

utf8, 

支援識別大部分的分詞,但是會過濾掉很多無法識別的分詞,因為這個原因也導致效率很高

,如果資料庫是

zhs16gbk

字符集,則只能使用

chinese vgram lexer.

note:追求效率那麼使用

chinese_lexer,

如果追求準確度那麼使用

chinese_vgram_lexer

(推薦使用

chinese_vgram_lexer)

建立步驟

全文檢索的大部分都在ctx包裡面

檢視使用者

select * from dba_users where username='ctxsys'

檢視角色 解鎖

alter user ctxsys account unlock;

角色授權:

根據需求選擇lexer制定文字解析器

建立文字解析器

begin

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

end;

/刪除文字解析器

begin

ctx_ddl.drop_preference ('my_lexer');

end;

建立全文索引

create index  ind_lot on lot(lot_id) indextype is ctxsys.context  parameters('lexer my_lexer');

刪除全文索引

drop index index_name force

索引同步維護

begin

ctx_ddl.sync_index('ind_lot');

ctx_ddl.optimize_index('ind_lot','full');

end;用法

ctx_ddl.sync_index(

ctx_web_acion_basic in varchar2 default null

memory in varchar2 default null,

p2014_1010_1020 in varchar2 default null

parallel_degree in number default 1)

ctx_ddl.sync_index('ind_lot','500m','p1')

也可以定時run job

sync同步

jobvariable jobno number;

begin

dbms_job.submit(:jobno,'ctx_ddl.sync_index(''ind_lot'');',

sysdate, 'sysdate + (1/24/6)');

commit;

end;           

optimize索引

variable jobno number;

begin

dbms_job.submit(:jobno,'ctx_ddl.optimize_index(''ind_lot'',''full'');',

sysdate, 'sysdate + 1');

commit;        

測試檢視資料

select * from lot where contains(lot_id,'北京

')>0

補充:有時候需要指定過掉一些詞(不會為這些詞建立全文索引)

指定過濾詞

exec ctx_ddl.create_stoplist('北京') 

ORACLE 全文索引

6 全文索引查詢語句contains select count from tablename t where contains t.name,農業銀行 公司 0 select from tablename t where contains t.name,農業 安徽 中 部 0 select from...

Oracle全文索引

zt 步驟三 設定詞法分析器 lexer oracle實現全文檢索,其機制其實很簡單。即通過oracle專利的詞法分析器 lexer 將文章中所有的表意單元 oracle 稱為 term 找出來,記錄在一組 以dr 開頭的表中,同時記下該term出現的位置 次數 hash 值等資訊。檢索時,orac...

mysql全文索引的坑 MySQL全文索引問題

我有乙個包含以下資料的 文章 mysql select from articles id title body 1 mysql tutorial dbms stands for database 2 how to use mysql well after you went through a 3 o...