全文檢索?Lucene?
在我們開發項目的過程中,我們往往會使用模糊搜索這個功能,比如說:
我們數據庫中存儲有 ”商品名稱“ 這個字段,我們需要對其進行模糊搜索。
在項目前期我們直接在數據庫中使用 like 語句進行模糊搜索,然後項目運行一段時間,新增了大量的商品,數據量增加到上百萬的數據,這時只要搜索需要很長時間才能響應。
出現這個原因是在模糊搜索上,因爲普通的數據庫模糊搜索根本做不了索引,用戶每次搜索都進行全表掃描查詢,速度當然慢。
這時候我想起淘寶京東,他們的商品數量應該不止百萬,那他們是怎麼做到秒搜的呢?
這時候我們就可以在網上查詢一下,大家都在說搜索引擎,什麼 elasticsearch Solr 這些搜索引擎,支持PB級數據,感覺好牛氣。但是他們都有個問題,那就是他們是單獨的服務。
如果我們想開發個單機版的應用,這時我們就要安裝這些額外的軟件,這個就有點麻煩了。
經過進一步的瞭解,我知道了這些搜索引擎基本上都是基於 Lucene 開發的,而且 Lucene 只是一個工具包,不需要額外的服務,這就是我們需要的。
基本上使用 Lucene 的話,上面我們有的問題都沒了,上面單機版的應用這些都沒問題。
我們該如何選擇?
在上面我的描述中,我們基本確定了該如何選擇;
- 在我們大型分佈式的應用,我們應該使用 elasticsearch 、Solr 這些產品。
- 在單機小項目中,比如:個人博客、知識庫等等數據量不太大的情況下用 Lucene 。
現有的項目要怎麼使用?
假如我們現在已經在運行的項目,我們想用 Lucene 或者 elasticsearch 、Solr 這些來做搜索,可以嗎?
這當然是可以的,我們只要把數據通過 Lucene 或者 elasticsearch 、Solr 這些來處理一下,以後的搜索全部走他們就可以了,至於添加修改這些還是操作原來的表。
比如說我有個博客網站,我想使用 Lucene 來進行全文搜索,這時我只要把之前的文章使用 Lucene 來創建索引,然後把搜索的接口改成使用 Lucene 來搜索,以後添加的文章我就把數據放到 Lucene 中,這樣就可以了。
學習資源
-
Bilibili ElasticSearch7.6.x視頻 https://www.bilibili.com/video/BV17a4y1x7zq
-
Bilibili Lucene全文檢索技術視頻 https://www.bilibili.com/video/BV1jt4y1q79U
-
lucene 官網 https://lucene.apache.org/
-
lucene界面管理工具 luke https://github.com/DmitryKey/luke 【點擊下載luke8.0.0】
-
IK中文分詞器 IKAnalyzer-lucene https://gitee.com/jianggujin/IKAnalyzer-lucene