Oracle的全文索引

xuexiaogang發表於2021-12-10

自己原文公眾號: https://mp.weixin.qq.com/s/IRudl8cUdkR8UYdZOVBdKg

上一篇說了MySQL的全文檢索。其實我最早是用Oracle的全文。因為在沒有elasticsearch之前,日子總要過吧?Shay Banon在2004年創造了Elasticsearch的前身,稱為Compass。在考慮Compass的第三個版本時,他意識到有必要重寫Compass的大部分內容,以“建立一個可擴充套件的搜尋解決方案”。因此,他建立了“一個從頭構建的分散式解決方案”,並使用了一個公共介面,即HTTP上的JSON,它也適用於Java以外的程式語言。Shay Banon在2010年2月釋出了Elasticsearch的第一個版本。

    現如今不少使用elasticsearch的其實用的也不太對。因為elasticsearch即使搜尋引擎也能存資料。所以他是一個資料庫。結果有人拿著這個錘子看什麼都是釘子。不管合適不合適都存到裡面去。

    可以嗎?可以,但是不是都有必要。如果僅僅儲存讀取沒問題。如果說從關係型資料庫同步,未必能保證一致。其實關係型資料庫現在都是多模,誰家還做不了個這個?

    上一篇寫了MySQL的。今天是Oracle的。PG的實驗請拭目以待。

    執行一下授權:

grant execute on ctx_ddl to xxg;


建表和MySQL的一樣。

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


exec ctx_ddl.create_preference('my_filter','CHARSET_FILTER');


exec ctx_ddl.set_attribute('my_filter','charset','ZHS16GBK');


create index idx_ft on full (name) indextype is ctxsys.context parameters('lexer my_lexer');


紅色的是表名和列明。


開始查詢(模擬資料都一樣)

如果要實現“網易”+“廣州” 排除全形半形怎麼辦?我開始不知道語法是什麼?

後來想想不就是且的關係嗎?


於是乎:

select * from full where contains(name,'網易')>0 and contains(name,'廣州')>0;

嗯,就是這樣。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/637517/viewspace-2847120/,如需轉載,請註明出處,否則將追究法律責任。

相關文章