Oracle建立全文索引的步驟

來源:互聯網
上載者:User

Oracle全文索引相信大家都有一定的瞭解,下面就教您如何建立oracle全文索引,如果您對oracle全文索引方面感興趣的話,不妨一看。

步驟一 檢查和設定資料庫角色
首先檢查資料庫中是否有CTXSYS使用者和CTXAPP腳色。如果沒有這個使用者和角色,意味著你的資料庫建立時未安裝intermedia功能。你必須修改資料庫以安裝這項功能。 預設安裝情況下,ctxsys使用者是被鎖定的,因此要先啟用ctxsys的使用者。

步驟二 賦權
在ctxsys使用者下把ctx_ddl的執行許可權賦於要使用oracle全文索引的使用者,例:

grant execute on ctx_ddl to pomoho;

步驟三 設定詞法分析器(lexer)
Oracle實現全文檢索索引,其機制其實很簡單。即通過Oracle專利的詞法分析器(lexer),將文章中所有的表意單元(Oracle 稱為 term)找出來,記錄在一組以dr$開頭的表中,同時記下該term出現的位置、次數、hash 值等資訊。檢索時,Oracle 從這組表中尋找相應的term,並計算其出現頻率,根據某個演算法來計算每個文檔的得分(score),即所謂的‘匹配率’。而lexer則是該機制的核心,它決定了全文檢索索引的效率。Oracle 針對不同的語言提供了不同的 lexer, 而我們通常能用到其中的三個:

n      basic_lexer: 針對英語。它能根據空格和標點來將英語單詞從句子中分離,還能自動將一些出現頻率過高已經失去檢索意義的單詞作為‘垃圾’處理,如if , is 等,具有較高的處理效率。但該lexer應用於漢語則有很多問題,由於它只認空格和標點,而漢語的一句話中通常不會有空格,因此,它會把整句話作為一個term,事實上失去檢索能力。以‘中國人民站起來了’這句話為例,basic_lexer 分析的結果只有一個term ,就是‘中國人民站起來了’。此時若檢索‘中國’,將檢索不到內容。

n      chinese_vgram_lexer: 專門的漢語分析器,支援所有漢字字元集(ZHS16CGB231280 ZHS16GBK ZHT32EUC ZHT16BIG5 ZHT32TRIS ZHT16MSWIN950 ZHT16HKSCS UTF8 該分析器按字為單元來分析漢語句子。‘中國人民站起來了’這句話,會被它分析成如下幾個term: ‘中’,‘中國’,‘國人’,‘人民’,‘民站’,‘站起’,起來’,‘來了’,‘了’。可以看出,這種分析方法,實現演算法很簡單,並且能實現‘一網打盡’,但效率則是差強人意。

n      chinese_lexer: 這是一個新的漢語分析器,只支援utf8字元集。上面已經看到,chinese vgram lexer這個分析器由於不認識常用的漢語詞彙,因此分析的單元非常機械,像上面的‘民站’,‘站起’在漢語中根本不會單獨出現,因此這種term是沒有意義的,反而影響效率。chinese_lexer的最大改進就是該分析器 能認識大部分常用漢語詞彙,因此能更有效率地分析句子,像以上兩個愚蠢的單元將不會再出現,極大 提高了效率。但是它只支援 utf8, 如果你的資料庫是zhs16gbk字元集,則只能使用笨笨的那個Chinese vgram lexer.

如果不做任何設定,Oracle 預設使用basic_lexer這個分析器。要指定使用哪一個lexer, 可以這樣操作:

第一. 目前使用者下下建立一個preference(例:在pomoho使用者下執行以下語句)

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

第二.   在建立oracle全文索引索引時,指明所用的lexer:

CREATE INDEX myindex ON mytable(mycolumn) indextype is ctxsys.context

parameters('lexer my_lexer');

這樣建立的全文檢索索引索引,就會使用chinese_vgram_lexer作為分析器。

步驟四 建立索引

通過以下文法建立全文索引
CREATE INDEX [schema.]index on [schema.]table(column) INDEXTYPE IS ctxsys.context [ONLINE]LOCAL [(PARTITION [partition] [PARAMETERS('paramstring')][, PARTITION [partition] [PARAMETERS('paramstring')]])][PARAMETERS(paramstring)] [PARALLEL n] [UNUSABLE];
例:
CREATE INDEX ctx_idx_menuname ON pubmenu(menuname) indextype is ctxsys.context parameters('lexer my_lexer')

步驟五 使用索引

使用全文索引很簡單,可以通過:

select * from pubmenu where contains(menuname,'上傳圖片')>0全文索引的種類
建立的Oracle Text索引被稱為域索引(domain index),包括4種索引類型:

l          CONTEXT

l          CTXCAT

l          CTXRULE

l          CTXXPATH

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.