与其他替代方案的比较
为您的项目选择一个搜索引擎是一项重要但艰巨的任务。本文将介绍 Meilisearch 与其他搜索引擎之间的区别。
网络上有许多搜索引擎,包括开源和非开源的。为您的项目选择最合适的搜索解决方案非常重要,但也充满挑战。在本文中,我们将探讨 Meilisearch 与其他搜索引擎之间的区别。
-
在比较表中,我们概述了 Meilisearch 与其他搜索引擎之间的差异。
-
相反,在方法比较中,我们重点关注 Meilisearch 如何与目前市场上最大的两个解决方案——ElasticSearch和Algolia进行比较。
-
最后,我们以对更广泛的搜索引擎格局的深入分析来结束本文。
请注意,以下描述的许多搜索产品都在不断发展——就像 Meilisearch 一样。这些只是我们自己的印象,可能无法反映最近的变化。如果发现任何不准确之处,请随时提交问题或拉取请求。
比较表
概述
Meilisearch | Algolia | Typesense | Elasticsearch | |
---|---|---|---|---|
源代码许可 | MIT (完全开源) | 闭源 | GPL-3 (完全开源) | AGPLv3 (开源) |
构建于 | 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 支持 | ✅ | ✅ | ❌ 可作为独立模块使用 | ❌ 可作为独立模块使用 | |
即时搜索 | ✅ | ✅ | ✅ | ✅ | |
自动补全 | ✅ | ✅ | ✅ | ✅ | |
文档搜索 | ✅ | ✅ | ✅ | ❌ | |
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 操作 | ✅ | ✅ |
分面搜索 | ✅ | ✅ | ✅ 分面字段必须是可搜索的 当需要返回超过 1000 万个分面值时,分面操作可能需要几秒钟 | ✅ |
唯一属性 按字段值对文档去重 | ✅ | ✅ | ✅ | ✅ |
分组 按字段值对文档进行分桶 | ❌ | ✅ | ✅ | ✅ |
AI 驱动的搜索
Meilisearch | Algolia | Typesense | Elasticsearch | |
---|---|---|---|---|
语义搜索 | ✅ | 🔶 高级计划中提供 | ✅ | ✅ |
混合搜索 | ✅ | 🔶 高级计划中提供 | ✅ | ✅ |
嵌入生成 | ✅ OpenAI HuggingFace REST 嵌入器 | 未公开 | OpenAI GCP Vertex AI | ✅ ELSER E5 Cohere OpenAI Azure Google AI Studio Hugging Face |
提示模板 | ✅ | 未公开 | ❌ | ❌ |
向量存储 | ✅ | 未公开 | ✅ | ✅ |
Langchain 集成 | ✅ | ❌ | ✅ | ✅ |
GPU 支持 | ✅ CUDA | 未公开 | ✅ CUDA | ❌ |
可视化
Meilisearch | Algolia | Typesense | Elasticsearch | |
---|---|---|---|---|
迷你仪表盘 | ✅ | 🔶 云产品 | 🔶 云产品 | ✅ |
搜索分析 | ✅ 云产品 | ✅ 云产品 | ❌ | ✅ 云产品 |
监控仪表盘 | ✅ 云产品 | ✅ 云产品 | ✅ 云产品 | ✅ 云产品 |
部署
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 问题和讨论 | 即时消息/聊天框, 公共社区论坛 | 即时消息/聊天框(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 不最适合此用例,它仍然是一个出色的开源解决方案。但是,它需要技术知识才能执行高级功能,因此需要更多时间来根据您的业务进行定制。
我们的目标是成为开发者的默认解决方案。