[筆記] 自架搜尋引擎工具的選擇:Elasticsearch, Typesense, MeiliSearch, Sonic…

本篇文章更新時間:2022/09/29
如有資訊過時或語誤之處,歡迎使用 Contact 功能通知。
一介資男的 LINE 社群開站囉!歡迎入群聊聊~
如果本站內容對你有幫助,歡迎使用 BFX Pay 加密貨幣新台幣 贊助支持。


標題是我找了自架開源搜尋引擎資料後的排序。

個人目標是: 對主機需求輕量、高效率、錯字容錯(typo-tolerant)、SDK與文件完整、社群整合應用

目標需求照順序排列

Elasticsearch (JAVA 語言開發)

其實 2017 年的時候已經使用並筆記 Elasticsearch 來做過服務。

這套工具真的很強,至今 2022 也還沒有看到真的可以超越的。(當然每個應用的場景也不太相同就是)

不過他的發展以及需求,隨著時間演進,已經讓我覺得過於沈重。 JAVA 也是著名的吃主機資源怪獸,如此想要用 Elasticsearch 來建置簡單用途的搜尋工具就變成殺雞用牛刀。

所以在我心中,如果不考慮主機資源,首選當然還是 Elasticsearch。

知名 WordPress 開發業者 10up 也有推出 ElasticPress 這款外掛,來改善內建搜尋工具非常雞肋且耗費效能的問題。

Typesense (C++ 語言開發)

一個二進位執行檔案就可以開始運作的編譯特性深得我心,C++ 開發自然速度與輕量是保證。

看過他們 Blog 中比較其他競品的表格文章 Compare Algolia vs ElasticSearch vs Meilisearch vs Typesense 後,更加是讓我決定後續想搭配這套來做應用。

也有社群夥伴推出 WordPress 搜尋強化外掛 Search with Typesense,架設簡單,啟用也簡單。

本站的搜尋頁面:內容搜尋 也是使用這整套建置,可以玩玩看!

但使用彈性就還不夠好,像是資料結構不能接受多層(Nested)結構,需要扁平化(Flatten)處理、搜尋時不能不指定欄位(query_by 無萬用字元用法)、中文的斷詞與容錯功能還在開發中

MeiliSearchSonic (Rust 語言開發)

這兩套放一起純粹是真的很相似,但論產品完整度, MeilSearch 還是贏過後起之秀的 Sonic。

Why should you use MeiliSearch over Elasticsearch? 如同一開始說的,大家都是拿 Elasticsearch 來當對標,但多多少少還是有差異,而使用感覺很像這點讓學習門檻沒這麼高了。

但用 Rust 開發的軟體也是會編譯成二進位單一執行檔案,這使用起來的方便,絕對是令人難忘。

MeliSearch 可以接受多層結構資料,並且搜尋不需要指定欄位的操作也直覺。文件與有官方支援的 PHP SDK 都很完整,使用上真的沒什麼障礙,會列在 Typesense 後的選擇不是沒有道理。

但面對如果要灌大量資料會有效能瓶頸出現的缺點,還是得要再給他一點時間來進化了

2022/03 有網友介紹過 [推薦] 輕量級全文檢索搜尋引擎 Meilisearch

後記

原本其實是想改善 WordPres 外掛搜尋頁面。因為那個搜尋結果有加入自己的權重去排序,變得很多想直接找到目標的外掛都被擠壓,而且效率也不夠快,沒想到這個需求,給我多花了好幾天先研究搜尋引擎的替代方案,又延伸出一些有趣的玩法。

上述提到的 Typesense 有 WordPress 外掛。他的用法很簡單,帶入操作的 key 與設定你 Typesense Server 資訊後就去建立索引。

如果兩個以上的站用同樣設定建立索引呢? 答案就是大家都可以串在一起!從 A 站搜尋到 B 站的內容,大家串聯一起,解決問題的速度又更快了~

但這樣的使用情境單靠那個外掛還是會有問題,像是如果索引用的 ID 如果重複,會有被覆蓋的情況,實際上要這樣玩,還是要另外處理,但理論上是可行的,簡單一點就是收集 RSS Feed 來爬過與匯入當 Server 就好,其他使用者當 Client 純粹使用。

如果不想搞這麼麻煩,又想讓 WordPress 搜尋能力提升到全文檢索,可以使用這款外掛:Full-Text Search 讓資料庫的功能釋放出來!


Share:

作者: Chun

資訊愛好人士。主張「人人都該為了偷懶而進步」。期許自己成為斜槓到變進度條 100% 的年輕人。[///////////____34%_________]

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

文章
Filter

Filter Search Results