與其他替代方案的比較
網路上有許多搜尋引擎,包括開源和其他類型的。決定哪種搜尋解決方案最適合您的專案非常重要,但也非常困難。在本文中,我們將探討 Meilisearch 與其他搜尋引擎之間的差異。
-
在比較表中,我們概述了 Meilisearch 與其他搜尋引擎之間的差異。
-
在方法比較中,我們將重點放在 Meilisearch 如何與目前市場上最大的兩種解決方案ElasticSearch和Algolia進行比較。
-
最後,我們將以對更廣泛的搜尋引擎領域的深入分析來結束本文。
注意
請注意,以下描述的許多搜尋產品都在不斷發展,就像 Meilisearch 一樣。這些只是我們自己的印象,可能無法反映最近的變化。如果某些內容不準確,請隨時開啟議題或發出合併請求。
比較表
一般概述
Meilisearch | Algolia | Typesense | Elasticsearch | |
---|---|---|---|---|
原始碼授權 | MIT (完全開源) | 封閉原始碼 | GPL-3 (完全開源) | SSPL (非開源) |
使用以下語言構建 | Rust 了解我們為什麼相信 Rust. | C++ | C++ | Java |
資料儲存 | 使用記憶體對應的磁碟 - 不受 RAM 限制 | 受 RAM 限制 | 受 RAM 限制 | 帶有 RAM 快取的磁碟 |
功能
整合與 SDK
注意:我們僅列出每個不同搜尋引擎內部團隊正式支援的函式庫。
找不到您希望我們支援的客戶端?提交您的想法或為其投票😇
SDK | Meilisearch | Algolia | Typesense | Elasticsearch |
---|---|---|---|---|
REST API | ✅ | ✅ | ✅ | ✅ |
JavaScript 客戶端 | ✅ | ✅ | ✅ | ✅ |
PHP 客戶端 | ✅ | ✅ | ✅ | ✅ |
Python 客戶端 | ✅ | ✅ | ✅ | ✅ |
Ruby 客戶端 | ✅ | ✅ | ✅ | ✅ |
Java 客戶端 | ✅ | ✅ | ✅ | ✅ |
Swift 客戶端 | ✅ | ✅ | ✅ | ❌ |
.NET 客戶端 | ✅ | ✅ | ✅ | ✅ |
Rust 客戶端 | ✅ | ❌ | 🔶 開發中 | ✅ |
Go 客戶端 | ✅ | ✅ | ✅ | ✅ |
Dart 客戶端 | ✅ | ✅ | ✅ | ❌ |
Symfony | ✅ | ✅ | ✅ | ❌ |
Django | ❌ | ✅ | ❌ | ❌ |
Rails | ✅ | ✅ | 🔶 開發中 | ✅ |
官方 Laravel Scout 支援 | ✅ | ✅ | ❌ 可作為獨立模組使用 | ❌ 可作為獨立模組使用 |
Instantsearch | ✅ | ✅ | ✅ | ✅ |
Autocomplete | ✅ | ✅ | ✅ | ✅ |
Docsearch | ✅ | ✅ | ✅ | ❌ |
Strapi | ✅ | ✅ | ❌ | ❌ |
Gatsby | ✅ | ✅ | ✅ | ❌ |
Firebase | ✅ | ✅ | ✅ | ❌ |
組態
文件結構描述
Meilisearch | Algolia | Typesense | Elasticsearch | |
---|---|---|---|---|
無結構描述 | ✅ | ✅ | 🔶id 欄位為必填,且必須為字串 | ✅ |
巢狀欄位支援 | ✅ | ✅ | ✅ | ✅ |
巢狀文件查詢 | ❌ | ❌ | ❌ | ✅ |
自動文件 ID 偵測 | ✅ | ❌ | ❌ | ❌ |
原生文件格式 | JSON 、NDJSON 、CSV | JSON | NDJSON | JSON 、NDJSON 、CSV |
壓縮支援 | Gzip、Deflate 和 Brotli | Gzip | ❌ 將承載內容讀取為 JSON,這可能導致文件損壞 | Gzip |
關聯性
Meilisearch | Algolia | Typesense | Elasticsearch | |
---|---|---|---|---|
容錯字 | ✅ | ✅ | ✅ | 🔶 需要由模糊查詢指定 |
可排序的排名規則 | ✅ | ✅ | 🔶 欄位權重可以更改,但排名規則的順序無法更改。 | ❌ |
自訂排名規則 | ✅ | ✅ | ✅ | 🔶 函式分數查詢 |
查詢欄位權重 | ✅ | ✅ | ✅ | ✅ |
同義詞 | ✅ | ✅ | ✅ | ✅ |
停用詞 | ✅ | ✅ | ❌ | ✅ |
自動語言偵測 | ✅ | ✅ | ❌ | ❌ |
支援所有語言 | ✅ | ✅ | ✅ | ✅ |
排名分數詳細資訊 | ✅ | ✅ | ❌ | ✅ |
安全性
Meilisearch | Algolia | Typesense | Elasticsearch | |
---|---|---|---|---|
API 金鑰管理 | ✅ | ✅ | ✅ | ✅ |
租戶令牌和多租戶索引 | ✅ 多租戶支援 | ✅ | ✅ | ✅ 基於角色的 |
搜尋
Meilisearch | Algolia | Typesense | Elasticsearch | |
---|---|---|---|---|
佔位符搜尋 | ✅ | ✅ | ✅ | ✅ |
多索引搜尋 | ✅ | ✅ | ✅ | ✅ |
聯合搜尋 | ✅ | ❌ | ❌ | ✅ |
完全詞組搜尋 | ✅ | ✅ | ✅ | ✅ |
地理搜尋 | ✅ | ✅ | ✅ | ✅ |
排序方式 | ✅ | 🔶 每個索引限制為一個 sort_by 規則。索引可能必須針對每個排序欄位和排序順序進行複製 | ✅ 每個搜尋查詢最多 3 個排序欄位 | ✅ |
篩選 | ✅ 支援使用類似 SQL 語法的複雜篩選查詢。 | 🔶 不支援跨多個欄位的 OR 運算 | ✅ | ✅ |
分面搜尋 | ✅ | ✅ | ✅ 分面欄位必須可搜尋 當必須傳回超過 1 千萬個分面值時,分面可能需要數秒鐘的時間 | ✅ |
獨特屬性 依欄位值將文件去重複 | ✅ | ✅ | ✅ | ✅ |
分組 依欄位值將文件分組 | ❌ | ✅ | ✅ | ✅ |
AI 驅動搜尋
Meilisearch | Algolia | Typesense | Elasticsearch | |
---|---|---|---|---|
語意搜尋 | ✅ | 🔶 在 Premium 方案下 | ✅ | ✅ |
混合搜尋 | ✅ | 🔶 在 Premium 方案下 | ✅ | ✅ |
嵌入生成 | ✅ OpenAI HuggingFace REST 嵌入器 | 未公開 | OpenAI GCP Vertex AI | ❌ |
提示範本 | ✅ | 未公開 | ❌ | ❌ |
向量儲存 | ✅ | 未公開 | ✅ | ✅ |
Langchain 整合 | ✅ | ❌ | ✅ | ✅ |
GPU 支援 | ✅ CUDA | 未公開 | ✅ CUDA | ❌ |
視覺化
部署
Meilisearch | Algolia | Typesense | Elasticsearch | |
---|---|---|---|---|
自託管 | ✅ | ❌ | ✅ | ✅ |
平台支援 | ARM x86 x64 | 不適用 | 🔶 ARM (macOS 上需要 Docker) x86 x64 | ARM x86 x64 |
官方一鍵部署 | ✅ DigitalOcean Platform.sh Azure Railway Koyeb | ❌ | 🔶 僅適用於雲端託管解決方案 | ❌ |
官方雲端託管解決方案 | Meilisearch Cloud | ✅ | ✅ | ✅ |
高可用性 | 可透過 Meilisearch Cloud 取得 | ✅ | ✅ | ✅ |
執行階段相依性 | 無 | 不適用 | 無 | 無 |
向下相容性 | ✅ | 不適用 | ✅ | ✅ |
升級路徑 | 文件會在升級時自動重新索引 | 不適用 | 文件會在升級時自動重新索引 | 文件會在升級時自動重新索引,最多 1 個主要版本 |
限制
Meilisearch | Algolia | Typesense | Elasticsearch | |
---|---|---|---|---|
索引最大數量 | 無限制 | 1000 個,聯絡支援可增加限制 | 無限制 | 無限制 |
索引最大大小 | 80TiB | 128GB | 受 RAM 限制 | 無限制 |
每個屬性的最大字數 | 無限制 | 無限制 | 無限制 | 無限制 |
文件最大大小 | 無限制 | 100KB,可設定 | 無限制 | 預設 100KB,可設定 |
社群
Meilisearch | Algolia | Typesense | Elasticsearch | |
---|---|---|---|---|
主要專案的 GitHub 星星數 | 42K | 不適用 | 17K | 66K |
主要專案的貢獻者人數 | 179 | 不適用 | 38 | 1,900 |
公開的 Discord/Slack 社群規模 | 2,100 | 不適用 | 2,000 | 16K |
支援
Meilisearch | Algolia | Typesense | Elasticsearch | |
---|---|---|---|---|
狀態頁面 | ✅ | ✅ | ✅ | ✅ |
免費支援管道 | 即時訊息/聊天室(延遲 2-3 小時), 電子郵件, 公開的 Discord 社群, GitHub issue 和討論 | 即時訊息/聊天室, 公開的社群論壇 | 即時訊息/聊天室(延遲 24-48 小時), 公開的 Slack 社群, GitHub issue。 | 公開的 Slack 社群, 公開的社群論壇, GitHub issue |
付費支援管道 | 支援是免費的! | 電子郵件 | 電子郵件, 電話, 私人 Slack | 網頁支援, 電子郵件, 電話 |
方法比較
Meilisearch vs Elasticsearch
Elasticsearch 被設計為後端搜尋引擎。雖然它不適合此目的,但通常用於為終端使用者建立搜尋列。
Elasticsearch 可以處理搜尋大量資料和執行文字分析。為了使其有效用於終端使用者搜尋,您需要花時間了解更多關於 Elasticsearch 內部運作方式,以便能夠自訂和調整它以符合您的需求。
與 Elasticsearch 不同,Elasticsearch 是一種為大量日誌資料設計的通用搜尋引擎(例如,後端搜尋),Meilisearch 旨在提供針對終端使用者的高效能即時搜尋體驗(例如,前端搜尋)。
如果您想要提供完整的即時搜尋體驗,Elasticsearch 有時會太慢。大多數情況下,與 Meilisearch 相比,它在返回搜尋結果方面明顯較慢。
如果您需要一個簡單易用的工具來部署容錯搜尋列,Meilisearch 是完美的選擇。它提供前綴搜尋功能,使搜尋對使用者來說直觀,並且開箱即用地立即返回具有卓越相關性的結果。
如需更詳細的分析,了解它與 Meilisearch 的比較方式,請參閱我們關於 Elasticsearch 的部落格文章。
Meilisearch vs Algolia
Meilisearch 的靈感來自 Algolia 的產品及其背後的演算法。我們確實研究了他們部落格文章中描述的大部分演算法和資料結構,以便實作我們自己的演算法。因此,Meilisearch 是一個基於 Algolia 和近期研究論文的新搜尋引擎。
Meilisearch 提供類似的功能,並能像其競爭對手一樣快速達到相同的相關性水準。
如果您是目前正在考慮轉用 Meilisearch 的 Algolia 使用者,您可能會對我們的遷移指南感興趣。
主要相似之處
Algolia 和 Meilisearch 之間最顯著的相似之處包括
- 功能,例如隨打即搜、容錯、分面等。
- 針對即時搜尋體驗的快速結果(答案 < 50 毫秒)
- 無結構描述索引
- 支援所有 JSON 資料類型
- 非同步 API
- 類似的查詢回應
主要差異
與 Algolia 相反,Meilisearch 是開源的,可以分支或自託管。
此外,Meilisearch 是用 Rust 編寫的,這是一種現代系統級程式語言。Rust 提供速度、可攜性和彈性,這使得我們的搜尋引擎可以順暢地部署在虛擬機器、容器,甚至 Lambda@Edge 中。
定價
Algolia 的定價模式基於儲存的記錄數量和執行的 API 操作數量。對於中小型企業來說,它的費用可能高得令人卻步。
Meilisearch 是一個開源搜尋引擎,可透過Meilisearch Cloud 或自託管方式取得。與 Algolia 不同,Meilisearch 定價基於儲存的文件數量和執行的搜尋操作數量。但是,Meilisearch 提供更慷慨的免費方案,允許儲存更多文件,以及更公平的搜尋使用定價。Meilisearch 還為較大的用例提供 Pro 方案,以允許更可預測的定價。
快速瀏覽搜尋引擎領域
開源
Lucene
Apache Lucene 是一個免費的開源搜尋函式庫,用於索引和搜尋全文文件。它於 1999 年由 Doug Cutting 創建,他之前曾在 Xerox 的帕羅奧圖研究中心 (PARC) 和 Apple 編寫搜尋引擎。Lucene 用 Java 編寫,旨在建立 Web 搜尋應用程式,例如 Google 和 DuckDuckGo,後者仍然使用 Lucene 進行某些類型的搜尋。
Lucene 此後被分為幾個專案
- Lucene 本身:全文搜尋函式庫。
- Solr:具有強大 REST API 的企業搜尋伺服器。
- Nutch:一個可擴展和可伸縮的 Web 爬蟲,依賴 Apache Hadoop。
由於 Lucene 是許多開源或封閉源搜尋引擎背後的技術,因此它被認為是參考搜尋函式庫。
Sonic
Sonic 是一個用 Rust 編寫的輕量級且無結構描述的搜尋索引伺服器。Sonic 不能被視為開箱即用的解決方案,與 Meilisearch 相比,它不確保相關性排名。它不是儲存文件,而是包含一個具有 Levenshtein 自動機的反向索引。這意味著任何查詢 Sonic 的應用程式都必須使用傳回的 ID 從外部資料庫中檢索搜尋結果,然後應用一些相關性排名。
它能夠在幾 MB 的 RAM 上運行,使其成為一個極簡且資源高效的替代資料庫工具,這些工具可能太過於笨重而無法擴展。
Typesense
與 Meilisearch 一樣,Typesense 是一個針對速度進行最佳化的輕量級開源搜尋引擎。為了更好地了解它與 Meilisearch 的比較方式,請參閱我們關於 Typesense 的部落格文章。
Lucene 衍生產品
Lucene-Solr
Solr 是 Apache Lucene 的一個子專案,由 Yonik Seeley 於 2004 年創建,如今已是全球最廣泛使用的搜尋引擎之一。Solr 是一個以 Java 編寫並建構在 Lucene 之上的搜尋平台。換句話說,Solr 是 Lucene Java API 的 HTTP 包裝器,這意味著您可以使用它來利用 Lucene 的所有功能。此外,Solr 伺服器與 Solr Cloud 結合使用,提供分散式索引和搜尋功能,從而確保高可用性和可擴展性。資料會被共享,同時也會自動複製。此外,Solr 不僅僅是一個搜尋引擎;它經常被用作文件結構化的 NoSQL 資料庫。文件儲存在集合中,這可以與關聯式資料庫中的表格相提並論。
由於其可擴展的插件架構和可自訂功能,Solr 是一個擁有無限應用場景的搜尋引擎,即使它可以索引和搜尋文件及電子郵件附件,但它特別受到企業搜尋的歡迎。
Bleve & Tantivy
Bleve 和 Tantivy 是搜尋引擎專案,分別以 Golang 和 Rust 編寫,其靈感來自 Apache Lucene 及其演算法(例如,tf-idf,即 term frequency-inverse document frequency,詞頻-逆向文件頻率)。與 Lucene 一樣,兩者都是用於任何搜尋專案的程式庫;然而,它們並非即用型 API。
原始碼開放
Elasticsearch
Elasticsearch 是一個基於 Lucene 程式庫的搜尋引擎,最常用於全文搜尋。它提供了一個透過 HTTP 以 JSON 存取的 REST API。其關鍵選項之一稱為索引分片,可讓您將索引劃分為多個物理空間,以提高效能並確保高可用性。Lucene 和 Elasticsearch 的設計都旨在處理大量資料流、分析日誌和執行複雜查詢。您可以對符合指定查詢的文件執行操作和分析(例如,計算所有名為「Thomas」的使用者的平均年齡)。
如今,Lucene 和 Elasticsearch 是搜尋引擎領域的主要參與者。它們都是許多不同搜尋應用場景以及建構您自己的推薦引擎的可靠解決方案。它們是很好的通用產品,但需要正確配置才能獲得與 Meilisearch 或 Algolia 類似的結果。
閉源
Algolia
Algolia 是一家以 SaaS 模式提供搜尋引擎的公司。其軟體是閉源的。在其早期階段,Algolia 提供可嵌入應用程式的行動搜尋引擎,面臨著從頭開始實施搜尋演算法的挑戰。從一開始,就決定直接為終端使用者建構一個搜尋引擎,特別是在行動應用程式或網站內實施搜尋。Algolia 在過去幾年中成功展示了容忍錯別字對於改善使用者體驗至關重要,並且同樣地,它對降低跳出率和提高轉換率的影響。
除了 Algolia 之外,搜尋引擎市場上還有眾多 SaaS 產品可供選擇。它們大多數都使用 Elasticsearch 並微調其設定,以便擁有自訂和個人化的解決方案。
Swiftype
Swiftype 是一家專注於網站搜尋和分析的搜尋服務提供商。Swiftype 由 Matt Riley 和 Quin Hoxie 於 2012 年創立,自 2017 年 11 月起歸 Elastic 所有。它是一個基於 Elasticsearch 之上的端到端解決方案,這意味著它能夠利用 Elastic Stack。
Doofinder
Doofinder 是一項付費的站內搜尋服務,旨在以極少的設定整合到任何網站中。線上商店使用 Doofinder 來增加銷售額,旨在促進購買流程。
結論
每個搜尋解決方案都最適合特定應用場景的限制。由於每種類型的搜尋引擎都提供獨特的功能集,因此比較它們的效能既不容易也不相關。例如,在基於產品的資料庫上比較 Elasticsearch 和 Algolia 的速度是不公平的。對於非常大的全文資料庫也是如此。
因此,我們無法將自己與基於 Lucene 或針對特定任務的其他搜尋引擎進行比較。
在我們涵蓋的特定應用場景中,與 Meilisearch 最相似的解決方案是 Algolia。
雖然 Algolia 提供最先進和強大的搜尋功能,但這種效率伴隨著昂貴的定價。此外,它們的服務主要面向大型公司。
Meilisearch 致力於服務所有類型的開發人員。我們的目標是提供一個對開發人員友善、易於安裝和部署的工具。因為為終端使用者提供開箱即用的絕佳搜尋體驗對我們來說很重要,所以我們希望讓每個人都能以最少的努力,在無需任何財務資源的情況下,獲得最好的搜尋體驗。
通常,當開發人員正在尋找要整合到其應用程式中的搜尋工具時,他們會選擇 ElasticSearch 或效率較低的選項。即使 Elasticsearch 不是最適合此應用場景,它仍然是一個很棒的開源解決方案。但是,它需要技術知識才能執行進階功能,因此需要更多時間來為您的業務進行自訂。
我們的目標是成為開發人員的預設解決方案。