网络上有许多搜索引擎,包括开源和非开源的。为您的项目选择最合适的搜索解决方案非常重要,但也充满挑战。在本文中,我们将探讨 Meilisearch 与其他搜索引擎之间的区别。

请注意,以下描述的许多搜索产品都在不断发展——就像 Meilisearch 一样。这些只是我们自己的印象,可能无法反映最近的变化。如果发现任何不准确之处,请随时提交问题或拉取请求

比较表

概述

MeilisearchAlgoliaTypesenseElasticsearch
源代码许可MIT
(完全开源)
闭源GPL-3
(完全开源)
AGPLv3
(开源)
构建于Rust
查看我们为什么相信 Rust.
C++C++Java
数据存储内存映射磁盘 — 不受 RAM 限制受 RAM 限制受 RAM 限制带 RAM 缓存的磁盘

功能

集成与 SDK

注意:我们仅列出各搜索引擎内部团队官方支持的库。

找不到您希望我们支持的客户端?提交您的想法或投票支持它 😇

SDKMeilisearchAlgoliaTypesenseElasticsearch
REST API
JavaScript 客户端
PHP 客户端
Python 客户端
Ruby 客户端
Java 客户端
Swift 客户端
.NET 客户端
Rust 客户端🔶
进行中
Go 客户端
Dart 客户端
Symfony
Django
Rails🔶
进行中
官方 Laravel Scout 支持
可作为独立模块使用

可作为独立模块使用
即时搜索
自动补全
文档搜索
Strapi
Gatsby
Firebase

配置

文档模式
MeilisearchAlgoliaTypesenseElasticsearch
无模式🔶
id 字段是必需的且必须为字符串
嵌套字段支持
嵌套文档查询
自动文档 ID 检测
原生文档格式JSONNDJSONCSVJSONNDJSONJSONNDJSONCSV
压缩支持Gzip、Deflate 和 BrotliGzip
将负载读取为 JSON,可能导致文档损坏
Gzip
相关性
MeilisearchAlgoliaTypesenseElasticsearch
错别字容忍🔶
需要通过模糊查询指定
可排序的排名规则🔶
字段权重可以更改,但排名规则顺序不能更改。
自定义排名规则🔶
函数评分查询
查询字段权重
同义词
停用词
自动语言检测
支持所有语言
排名分数详情
安全
MeilisearchAlgoliaTypesenseElasticsearch
API 密钥管理
租户令牌与多租户索引
多租户支持

基于角色的
搜索
MeilisearchAlgoliaTypesenseElasticsearch
占位符搜索
多索引搜索
联合搜索
精确短语搜索
地理搜索
排序依据🔶
每个索引仅限一个 sort_by 规则。对于每个排序字段和排序顺序,可能需要复制索引

每个搜索查询最多 3 个排序字段
筛选
支持使用类似 SQL 的语法进行复杂筛选查询。
🔶
不支持跨多个字段的 OR 操作
分面搜索
分面字段必须是可搜索的
当需要返回超过 1000 万个分面值时,分面操作可能需要几秒钟
唯一属性
按字段值对文档去重
分组
按字段值对文档进行分桶
AI 驱动的搜索
MeilisearchAlgoliaTypesenseElasticsearch
语义搜索🔶
高级计划中提供
混合搜索🔶
高级计划中提供
嵌入生成
OpenAI
HuggingFace
REST 嵌入器
未公开
OpenAI
GCP Vertex AI

ELSER
E5
Cohere
OpenAI
Azure
Google AI Studio
Hugging Face
提示模板未公开
向量存储未公开
Langchain 集成
GPU 支持
CUDA
未公开
CUDA
可视化
MeilisearchAlgoliaTypesenseElasticsearch
迷你仪表盘🔶
云产品
🔶
云产品
搜索分析
云产品

云产品

云产品
监控仪表盘
云产品

云产品

云产品

云产品

部署

MeilisearchAlgoliaTypesenseElasticsearch
自托管
平台支持ARM
x86
x64
不适用🔶 ARM (macOS 上需 Docker)
x86
x64
ARM
x86
x64
官方一键部署
DigitalOcean
Platform.sh
Azure
Railway
Koyeb
🔶
仅适用于云托管解决方案
官方云托管解决方案Meilisearch Cloud
高可用性可通过Meilisearch Cloud获得
运行时依赖不适用
向后兼容性不适用
升级路径升级时文档会自动重新索引不适用升级时文档会自动重新索引升级时文档会自动重新索引,最多支持 1 个主要版本

限制

MeilisearchAlgoliaTypesenseElasticsearch
最大索引数无限制1000,联系支持可增加限制无限制无限制
最大索引大小80TiB128GB受 RAM 限制无限制
最大文档大小无限制100KB,可配置无限制默认 100KB,可配置

社区

MeilisearchAlgoliaTypesenseElasticsearch
主项目 GitHub 星数42K不适用17K66K
主项目贡献者数量179不适用381,900
公共 Discord/Slack 社区规模2,100不适用2,00016K

支持

MeilisearchAlgoliaTypesenseElasticsearch
状态页面
免费支持渠道即时消息/聊天框(2-3小时延迟),
电子邮件,
公共 Discord 社区,
GitHub 问题和讨论
即时消息/聊天框,
公共社区论坛
即时消息/聊天框(24-48小时延迟),
公共 Slack 社区,
GitHub 问题。
公共 Slack 社区,
公共社区论坛,
GitHub 问题
付费支持渠道Slack 频道、电子邮件、个性化支持——无论您需要什么,我们都会提供!电子邮件电子邮件,
电话,
私人 Slack
网页支持,
电子邮件,
电话

方法比较

Meilisearch 与 Elasticsearch

Elasticsearch 被设计为后端搜索引擎。尽管它不适合此目的,但通常用于为终端用户构建搜索栏。

Elasticsearch 可以处理海量数据搜索和文本分析。为了使其对终端用户搜索有效,您需要花时间深入了解 Elasticsearch 的内部工作原理,以便对其进行定制和调整以满足您的需求。

与 Elasticsearch 不同,Elasticsearch 是一种为处理大量日志数据(例如,面向后端的搜索)而设计的通用搜索引擎,而 Meilisearch 则旨在为终端用户(例如,面向前端的搜索)提供高性能的即时搜索体验。

如果您想提供完整的即时搜索体验,Elasticsearch 有时会太慢。大多数情况下,与 Meilisearch 相比,它返回搜索结果的速度明显较慢。

如果您需要一个简单易用的工具来部署一个支持错别字容忍的搜索栏,Meilisearch 是一个完美的选择。它提供前缀搜索功能,使搜索对用户来说更直观,并能即时返回具有出色相关性的结果。

有关其与 Meilisearch 比较的更详细分析,请参阅我们关于 Elasticsearch 的博客文章

Meilisearch 与 Algolia

Meilisearch 的灵感来源于 Algolia 的产品及其背后的算法。我们确实研究了他们博客文章中描述的大部分算法和数据结构,以便实现我们自己的。因此,Meilisearch 是一个基于 Algolia 工作和最新研究论文的新型搜索引擎。

Meilisearch 提供类似的功能,并且能像其竞争对手一样快速达到相同的相关性水平。

如果您是正在考虑切换到 Meilisearch 的 Algolia 用户,您可能会对我们的迁移指南感兴趣。

主要相似点

Algolia 和 Meilisearch 之间最显著的相似点包括:

  • 即时搜索(search-as-you-type)、错别字容忍、分面等功能
  • 针对即时搜索体验的快速结果(响应时间 < 50 毫秒)
  • 无模式索引
  • 支持所有 JSON 数据类型
  • 异步 API
  • 相似的查询响应

主要区别

与 Algolia 不同,Meilisearch 是开源的,可以被 Fork 或自托管。

此外,Meilisearch 使用 Rust 编写,Rust 是一种现代系统级编程语言。Rust 提供了速度、可移植性和灵活性,使得我们的搜索引擎在虚拟机、容器甚至 Lambda@Edge 中部署变得无缝。

定价

Algolia 的定价模型基于存储的记录数量和执行的 API 操作数量。对于中小型企业来说,这可能会非常昂贵。

Meilisearch 是一个开源搜索引擎,可通过Meilisearch Cloud或自托管方式获取。与 Algolia 不同,Meilisearch 的定价基于存储的文档数量和执行的搜索操作数量。然而,Meilisearch 提供了更慷慨的免费套餐,允许存储更多文档,并为搜索使用提供更公平的定价。Meilisearch 还为大型用例提供了 Pro 计划,以实现更可预测的定价。

快速了解搜索引擎格局

开源

Lucene

Apache Lucene 是一个免费的开源搜索库,用于索引和搜索全文文档。它由 Doug Cutting 于 1999 年创建,他此前曾在施乐帕洛阿尔托研究中心 (PARC) 和苹果公司编写过搜索引擎。Lucene 使用 Java 编写,旨在构建网络搜索应用程序,如 Google 和 DuckDuckGo,其中后者仍将 Lucene 用于某些类型的搜索。

此后,Lucene 被分为几个项目:

  • Lucene 本身:全文搜索库。
  • Solr:一个带有强大 REST API 的企业搜索服务器。
  • Nutch:一个依赖 Apache Hadoop 的可扩展且可伸缩的网络爬虫。

由于 Lucene 是许多开源或闭源搜索引擎背后的技术,它被认为是参考搜索库。

Sonic

Sonic 是一个轻量级、无模式的搜索索引服务器,用 Rust 编写。Sonic 不能被视为开箱即用的解决方案,与 Meilisearch 相比,它不保证相关性排名。它不存储文档,而是包含一个带 Levenshtein 自动机的倒排索引。这意味着任何查询 Sonic 的应用程序都必须使用返回的 ID 从外部数据库检索搜索结果,然后应用一些相关性排名。

它能够在几兆字节的 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,即术语频率-逆文档频率)。与 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 不最适合此用例,它仍然是一个出色的开源解决方案。但是,它需要技术知识才能执行高级功能,因此需要更多时间来根据您的业务进行定制。

我们的目标是成为开发者的默认解决方案。