网络上有许多搜索引擎,既有开源的也有商业的。为项目选择合适的搜索解决方案非常重要,但也颇具挑战性。本文将详细对比 Meilisearch 与其他搜索引擎的差异:

请注意,下文描述的许多搜索产品(包括 Meilisearch)都在持续演进。本文仅代表我们的观点,可能无法反映最新变化。如发现任何不准确之处,欢迎提交 issue 或 pull request。

对比表格

总体概览

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 支持✅✅❌
可作为独立模块使用
❌
可作为独立模块使用
Instantsearch✅✅✅✅
Autocomplete✅✅✅✅
Docsearch✅✅✅❌
Strapi✅✅❌❌
Gatsby✅✅✅❌
Firebase✅✅✅❌

配置

文档模式
MeilisearchAlgoliaTypesenseElasticsearch
无模式✅✅🔶
id 字段必须存在且为字符串类型
✅
嵌套字段支持✅✅✅✅
嵌套文档查询❌❌❌✅
自动文档ID检测✅❌❌❌
原生文档格式JSON, NDJSON, CSVJSONNDJSONJSON, NDJSON, CSV
压缩支持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
Mini Dashboard✅🔶
云服务产品
🔶
云服务产品
✅
搜索分析✅
云服务产品
✅
云服务产品
❌✅
云服务产品
监控仪表盘✅
云服务产品
✅
云服务产品
✅
云服务产品
✅
云服务产品

部署方式

MeilisearchAlgoliaTypesenseElasticsearch
自托管✅❌✅✅
平台支持 ARM
x86
x64
不适用🔶 ARM (macOS 需 Docker)
x86
x64
ARM
x86
x64
官方一键部署✅
DigitalOcean
Platform.sh
Azure
Railway
Koyeb
❌🔶
仅限云托管方案
❌
官方云托管方案Meilisearch 云服务✅✅✅
高可用性通过 Meilisearch 云服务提供✅✅✅
运行时依赖无不适用无无
向后兼容✅不适用✅✅
升级路径升级时自动重建索引不适用升级时自动重建索引升级时自动重建索引(最多支持1个大版本)

限制对比

MeilisearchAlgoliaTypesenseElasticsearch
最大索引数量无限制1000(可联系支持团队提升限额)无限制无限制
最大索引大小80TiB128GB受内存限制无限制
单文档最大尺寸无限制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 不同,Meilisearch 旨在为终端用户提供高性能的即时搜索体验(例如前端搜索)。

如果要提供完整的即时搜索体验,Elasticsearch 有时会显得过于缓慢。大多数情况下,它的搜索结果返回速度明显慢于 Meilisearch。

如果你需要一个简单易用的工具来部署支持容错输入的搜索栏,Meilisearch 是完美选择。它提供前缀搜索能力,让搜索对用户更直观,并能即时返回开箱即用的高相关性结果。

要了解更详细的对比分析,请参阅我们关于 Elasticsearch 的博客文章。

Meilisearch 与 Algolia 对比

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

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

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

主要相似点

Algolia 和 Meilisearch 之间一些最重要的相似之处包括:

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

主要差异

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

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

定价

Algolia 的定价模式基于存储的记录数量和执行的 API 操作次数。对于中小型企业来说,其费用可能过高。

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

搜索引擎生态概览

开源方案

Lucene

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

Lucene 后来被划分为多个项目:

  • Lucene 核心:全文搜索库
  • Solr:带有强大 REST API 的企业级搜索服务器
  • Nutch:基于 Apache Hadoop 的可扩展网络爬虫

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

Sonic

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

它能够在几 MB 内存上运行的特性,使其成为数据库工具的一种极简且资源高效的替代方案,因为那些工具可能过于重量级而难以扩展。

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 数据库。文档存储在集合(collections)中,这些集合可以类比为关系型数据库中的表。

由于其可扩展的插件架构和可定制功能,Solr 是一个具有无限应用场景的搜索引擎。尽管它可以索引和搜索文档及电子邮件附件,但它在企业搜索领域尤其受欢迎。

Bleve 与 Tantivy

Bleve 和 Tantivy 分别是受 Apache Lucene 及其算法(例如 tf-idf,即词频-逆文档频率)启发,用 Golang 和 Rust 编写的搜索引擎项目。与 Lucene 类似,两者都是用于任何搜索项目的库;但它们不是开箱即用的 API。

源码可用

Elasticsearch

Elasticsearch 是一个基于 Lucene 库的搜索引擎,因其全文检索功能而广受欢迎。它提供了通过 HTTP 传输 JSON 的 REST API。其核心特性之一称为索引分片(index sharding),允许将索引划分为物理空间以提高性能并确保高可用性。Lucene 和 Elasticsearch 都专为处理高容量数据流、分析日志和执行复杂查询而设计。您可以对符合指定查询条件的文档执行操作和分析(例如计算所有名为”Thomas”用户的平均年龄)。

如今,Lucene 和 Elasticsearch 已成为搜索引擎领域的主导者。它们都是适用于多种搜索场景的可靠解决方案,也可用于构建推荐系统。作为通用型产品,它们需要经过适当配置才能获得与 Meilisearch 或 Algolia 相当的搜索结果。

闭源方案

Algolia

Algolia 是一家采用 SaaS 模式提供搜索引擎服务的公司,其软件为闭源产品。早期阶段,Algolia 专注于开发可嵌入移动应用的搜索引擎,面临从头实现搜索算法的挑战。从一开始,该公司就决定构建直接面向终端用户的搜索引擎,特别是为移动应用和网站实现站内搜索功能。过去几年间,Algolia 成功证明了容错输入(tolerating typos)对于提升用户体验的关键作用,以及其对降低跳出率、提高转化率的显著影响。

除 Algolia 外,搜索引擎市场上还有众多 SaaS 产品可供选择。其中大多数基于 Elasticsearch 进行深度定制,以提供个性化的解决方案。

Swiftype

Swiftype 是一家专注于网站搜索和分析的搜索服务提供商。该公司由 Matt Riley 和 Quin Hoxie 于 2012 年创立,现隶属于 Elastic(自 2017 年 11 月起)。作为基于 Elasticsearch 构建的端到端解决方案,Swiftype 能够充分利用 Elastic Stack 的技术优势。

Doofinder

Doofinder 是一项付费的站内搜索服务,其设计目标是只需极少配置即可集成到任何网站中。该服务被众多在线商店采用以提升销售额,旨在简化用户的购买流程。

结论

每种搜索解决方案都最适合特定用例的约束条件。由于每种类型的搜索引擎都提供独特的功能集,比较它们的性能既不容易也不相关。例如,在产品数据库上比较 Elasticsearch 和 Algolia 的速度是不公平的。对于非常大的全文数据库也是如此。

因此,我们无法与基于 Lucene 的搜索引擎或其他针对特定任务的搜索引擎进行比较。

在我们所涉及的特定用例中,与 Meilisearch 最相似的解决方案是 Algolia。

虽然 Algolia 提供了最先进和强大的搜索功能,但这种效率伴随着昂贵的价格。此外,他们的服务主要面向大型企业。

Meilisearch 致力于服务所有类型的开发者。我们的目标是提供一个对开发者友好、易于安装和部署的工具。因为为终端用户提供开箱即用的出色搜索体验对我们很重要,我们希望让每个人都能以最小的努力、无需任何财务资源就能获得最佳的搜索体验。

通常,当开发者寻找搜索工具集成到他们的应用程序时,他们会选择 ElasticSearch 或其他效果较差的选择。即使 Elasticsearch 并不最适合这种用例,它仍然是一个可用的优秀开源解决方案。然而,它需要技术知识来实现高级功能,因此需要更多时间来根据业务需求进行定制。

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