本篇文章更新時間:2022/09/29
如有資訊過時或語誤之處,歡迎使用 Contact 功能通知或向一介資男的 LINE 社群反應。
如果本站內容對你有幫助,歡迎贊助支持 。


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

個人目標是: 對主機需求輕量、高效率、錯字容錯(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 讓資料庫的功能釋放出來!


Share:

作者: Chun

WordPress 社群貢獻者、開源社群推廣者。專注於 WordPress 外掛開發、網站效能最佳化、伺服器管理,以及 iDempiere 開源 ERP 導入與客製開發。曾參與 WordCamp Taipei 等社群活動,GitHub Arctic Code Vault Contributor。提供資訊顧問、WordPress 開發教學、主機最佳化與企業 ERP 整合服務。

發佈留言

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


文章
Filter
Mastodon