開源搜尋技術的核心引擎 —— Lucene

碼洞發表於2022-12-05

開源搜尋技術的核心引擎 —— Lucene

ES 很了不起,需要使用搜尋技術的網際網路公司大半都在使用他,但是它的核心引擎卻是另一個開源框架 —— Lucene。ES 只是在 Lucene 的基礎上穿了一件華麗的外衣,沒有 ES 還會有其它產品來包裝 Lucene,比如另一個僅次於 ES 的流行搜尋系統 Solr,但是如果沒有 Lucene,那 ES 可能就不會存在。這就好比 TiDB 也並不是百分百的中國人自己的儲存系統,它的內部儲存引擎是 RocksDB,來源於 Facebook,TiDB 也只是在它的基礎上穿上的一件華麗的外衣。

       開源搜尋技術的核心引擎 —— Lucene       

但是呢我們卻不能小瞧這一件外衣,它的複雜程度也不亞於內部的引擎本身。Lucene 出來這麼多年,市場上流行的基於 Lucene 的分散式開源搜尋系統也只有 ES 和 Solr 兩個。不同於我們平時常用的 Web 框架五花八門,開源的搜尋系統卻並不是很豐富,因為它的製造成本比 Web 框架要高出太多。Lucene 在開源的搜尋引擎裡一直處於壟斷地位,它的實現語言是 Java 語言。以至於開源的分散式搜尋系統也不得跟著使用 Java 語言,使用其它語言克隆一個差不多的 Lucene 代價太高了 —— Lucene 的功能實在太豐富。我們在 Github 上可以搜尋到 Go 語言版本的 Lucene,但是它只是一個半吊子工程,太過於簡陋了,而是似乎已經很多年不再維護。

所以如果讀者希望更加深入地瞭解搜尋技術,那就必須把 Lucene 吃透。在 Lucene 非常瞭解的基礎上再來研究 ES 就可以事半功倍。但是有一件事必須要提,那就是 Lucene 的複雜程度要比 LevelDB 高出不少,所以需要有心理準備。在很多網際網路大廠,它們通常都是自己擼的一套搜尋引擎,既不會使用 Lucene,也不會使用 ES、Solr。但是這並不意味著它們自己做出的東西就比開源的出色,只不過它們為了自身的業務做了很多定製性的工作,在某些方向上可以捨棄通用型而打磨的更加極致。但是究其內部引擎的實現上他們通常都會非常頻繁的參考開源實現 —— 開源技術就是一座現成的金礦,巨人的肩膀不站白不站。

Lucene 就是一個單機版的搜尋引擎,就好比 LevelDB 就是一個單機版的 Key-Value 資料庫一樣。Lucene 最基本的功能分為寫功能和讀功能,寫的過程就是建索引,讀的過程就是使用索引。寫的過程越精緻,讀的過程就越準確越快速。這就好比你的高中書桌越整齊,找書的速度就越快,但是平時投入在書桌整理的時間上也就越多。這一點我深有體會 —— 因為我發現相比別人而言,我的高中書桌總是很亂,每次找書總要找很久。我也曾經嘗試過要做到像他們一樣,但是不出一個禮拜,書桌就再次陷入混亂。

Lucene 是 Java 語言實現的,我可能會編寫一些 Java 程式碼來嘗試 Lucene 的各種功能,希望對 Java 語言感到厭煩的同學請保持克制。不入虎穴焉得虎子,如果你看到 Java 語言就躲,那麼毫無疑問你會錯過很多美麗的風景線。

Lucene 內部就是一座巨大的寶藏,將這些寶藏一一挖掘出來將會給我們帶來無盡的收益。在本系列的後續文章中,我們首先會對 Lucene 進行一系列的分析講解,給搜尋技術打上夯實的基礎。也許你會質疑學習 Lucene 對我們這些寫業務程式碼的能帶來什麼幫助?業務程式碼不過是 CRUD,不過是複製貼上,並不需要多麼高階的知識就可以完成,學習這些高階的知識不過是走馬觀花一邊進一邊出。這是一個非常好的問題,可是如果我們一直這樣 CRUD,那麼作為一條鹹魚該何時才能翻身呢?

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

相關文章