本篇文章更新時間:2022/09/29
如有資訊過時或語誤之處,歡迎使用 Contact 功能通知。
一介資男的 LINE 社群開站囉!歡迎入群聊聊~
如果本站內容對你有幫助,歡迎使用 BFX Pay 加密貨幣 或 新台幣 贊助支持。
標題是我找了自架開源搜尋引擎資料後的排序。
- 8 Self-Hosted Powerful Search 🔍 Engine Software for Your Product
- Search Engine Software
- MeiliSearch
- Solr
- Elasticsearch
- Typesense
- Sonic
- TNTSearch
- Vespa
- Ambar
個人目標是: 對主機需求輕量、高效率、錯字容錯(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 無萬用字元用法)、中文的斷詞與容錯功能還在開發中
MeiliSearch 與 Sonic (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 讓資料庫的功能釋放出來!