介绍
在不断发展的数字环境中,搜索引擎在各个平台的搜索功能中扮演着越来越重要的角色。在流行的搜索引擎中, Meilisearch 和 Manticore Search 以其独特的产品脱颖而出。然而,为您的项目选择合适的搜索引擎需要对它们的性能、用例和局限性有透彻的理解。本文旨在提供 Meilisearch 和 Manticore Search 的比较,重点关注它们的功能集以及在三个真实世界基准中的数据摄取和搜索性能:1000 万个 NGINX 日志、Hacker News 110 万文档数据集和 Hacker News 1.16 亿文档数据集,所有数据集均可在 DB Benchmarks 获取。所有性能测试脚本、配置和数据集合均为 公开可用 并且可重复。
全文搜索相关性
Manticore 和 Meilisearch 都将自己定位为全文搜索引擎。全文搜索引擎的关键要素是它们在搜索过程中如何对文档进行排名。
选择合适的搜索排名算法对于确保用户能够精确和全面地找到所需信息至关重要。在全文搜索相关性的背景下,了解这些算法的工作原理以及它们如何有助于提供准确和有意义的搜索结果是至关重要的。
Manticore Search 在控制搜索排名方面非常灵活,并公开了数十个排名因素;然而,默认情况下,它采用经典的 BM25 算法及其衍生算法。 BM25 是一种成熟的信息检索算法,它根据术语频率和逆文档频率计算文档的相关性。
一个针对 BEIR(信息检索的基准和评估)基准的 进行中的拉取请求 展示了 Manticore Search 对搜索相关性的承诺。BEIR 是一个评估框架,测量信息检索系统在各种任务上的性能,例如文档检索和问答。BEIR 基准的结果可以在这里找到: https://docs.google.com/spreadsheets/d/1_ZyYkPJ_K0st9FJBrjbZqX14nmCCPVlE_y3a_y5KkYI/edit#gid=0 。
相比之下,Meilisearch 声称提供良好的搜索相关性,但没有公开的基准可用来证实这一说法。根据 Hacker News 上的讨论,Meilisearch 用户提到其搜索相关性,但没有任何实证证据,很难客观地将其性能与 Manticore Search 进行比较。
总体而言,Manticore Search 使用经过验证的排名算法并参与 BEIR 基准,突显了其提供高度相关搜索结果的承诺,使其成为各种应用的可靠选择。虽然 Meilisearch 也可能在全文搜索相关性方面表现出色,但由于没有建立的基准且所使用的算法不广为人知,因此很难做出明确的声明。
索引大小和数据摄取
Manticore Search 展示了其有效处理大数据集的能力(例如 17 亿文档出租车乘车测试 或简单的 Craigslist.org ),通过使用行存储和列存储。列存储方法专门设计用于加速搜索性能并降低大数据集上的 RAM 消耗。相比之下,Manticore Search 的默认行存储在小型和中型数据集上提供无与伦比的性能。这种灵活性使 Manticore Search 成为广泛应用的理想选择。
另一方面,Meilisearch 在处理较大数据集时遇到困难,因为我们无法在搜索引擎中加载 Hacker News 较大数据集 ,即使在加载了 2 天之后。此外,Meilisearch 在加载文档时性能下降。随着数据集的增长,加载每个后续文档批次所需的时间增加。这个性能问题表明 Meilisearch 在数据可扩展性方面存在问题,可能对需要实时数据摄取或大数据集索引的应用造成问题。Meilisearch 在单个队列中处理文档更新,这可能导致瓶颈并随着时间的推移降低性能。
需要注意的是,Meilisearch 中的文档更新不会立即反映在搜索查询中。这是因为 Meilisearch 使用异步任务队列来处理更新,确保搜索性能在密集索引操作期间保持稳定。
在更新文档时,变更会被添加到任务队列中,并在后台由引擎处理。一旦任务完成,更新的数据便会在搜索结果中可用。处理时间可能会因更新大小和服务器资源而异。要监控任务状态,您可以利用 Tasks API ,该 API 提供有关任务进度和完成的信息。
Manticore 提供实时插入、替换和删除功能,允许更改在查询完成后立即可见。
总之,虽然 Meilisearch 提供快速高效的搜索能力,但请记住,由于异步任务处理,文档的更新可能不会立即在搜索结果中可见。
搜索性能
Meilisearch 以其令人印象深刻的速度而闻名, 在许多情况下超越 Elasticsearch 。然而,当处理小型数据集时,其性能最为明显。随着数据集大小的增加,Meilisearch 的性能可能会下降。
Manticore Search 一直为各种查询类型和数据集类型提供快速的查询性能,超越了 Meilisearch 和 Elasticsearch 。通过优化的行式和列式索引方法,Manticore 确保了响应迅速的搜索体验,这对于在高性能应用中保持用户参与至关重要。
相比之下,Meilisearch 在高效处理大型数据集方面存在困难,并且在文档加载期间性能下降。因此,对于那些不想担心数据集大小的人来说,Manticore 是更优的选择。
基准测试
Hacker News 小型数据集 (Hacker News 评论)
Hacker News 小型数据集基准测试,包含 110 万条策划的 Hacker News 评论及其数值字段(来源: https://zenodo.org/record/45901/ ),突显了 Manticore Search 相较于 Meilisearch 更高的搜索性能。该数据集包含来自评论的文本数据和数值字段,如点赞数、时间戳和用户 ID。基准测试涉及运行全文和分析查询,以评估搜索引擎的能力。

基准测试结果也可以通过 此链接 验证。
不幸的是,Meilisearch 无法执行许多类型的查询,例如聚合查询和带有负全文搜索词的查询。
这个基准测试的一个有趣方面是两个搜索引擎之间在磁盘空间使用上的显著差异:
root@perf3 /perf/test_engines/tests/hn_small/manticore # du -sh idx
1.1G idx
root@perf3 /perf/test_engines/tests/hn_small/meilisearch # du -sh .
38G .
Meilisearch 需要 34 倍 的磁盘空间来存储与 Manticore Search 相同的数据集。
在数据加载性能方面,耗时为:
- Meilisearch 31 分钟
- Manticore 65 秒
以完全完成数据加载。
Hacker News 大型数据集 (1.16 亿条评论)
此测试涉及相同的 110 万条策划的 Hacker News 评论数据集(来源: https://zenodo.org/record/45901/ ),但乘以 100 倍,结果约为 1.16 亿条文档 。基准测试涵盖了全文和分析查询,使其成为评估搜索引擎在更大规模上能力的绝佳测试案例。
Meilisearch 在 2 天内无法加载数据。随着数据库的增长,其插入性能下降。我们尝试优化,但未能成功,因为所有批次,即使我们尝试使其并行,仍然进入单个队列。因此,我们无法在 Meilisearch 的数据加载中取得任何改进。Meilisearch 花费了大约 2 天的时间仅加载了 38% 的数据,这已经消耗了超过 850 GB 的磁盘空间。这与 Manticore Search 的表现形成鲜明对比,后者使用约 100 GB 的磁盘空间存储了整个数据集,并花费了 2 小时 9 分钟使用单个 CPU 核心加载(几乎是线性可扩展的)。
Meilisearch 无法处理整个 Hacker News 大型数据集,突显了其在管理和扩展更大数据集合方面的挑战。Manticore Search 在此基准测试中的优越性能强调了其处理大规模搜索需求的能力,使其成为更适合大型数据集合应用的选择。
由于我们无法将数据加载到 Meilisearch 中,您可以在 此处 查看仅 Manticore 的结果。
1000 万条 NGINX 日志
此测试基于包含 1000 万条 NGINX 日志的数据集。该数据集的来源是 Kaggle 。Web 服务器日志记录各种事件,为网站访客、用户行为、访问网站的爬虫、商业智能、安全问题等提供有价值的见解。基准测试使用了一份策划的典型查询列表,随机 DevOps 工程师可能会运行这些查询。
Manticore Search 和 Meilisearch 在数据集的磁盘空间使用上表现出显著差异。Manticore Search 使用了 4.4 GB 的磁盘空间,而 Meilisearch 消耗了 69 GB,约为 Manticore 的 15 倍。尽管与 Hacker News 小型数据集测试相比,差异不那么显著,但仍然值得注意,特别是考虑到 Logs10m 数据集包含较少的文本数据。
Meilisearch 花费了大约 20 分钟 来填充数据,而 Manticore 则在 6 分钟 内完成。
您可以通过 提供的链接 找到性能结果的详细比较。请注意,许多空结果仅仅是因为 Meilisearch 无法处理某些类型的查询。因此,这些查询在基准测试过程中被跳过。

Manticore Search 和 Meilisearch 的功能比较
- 全文匹配
- ✅ Manticore: 超过 20 种全文操作符。反向搜索(反向搜索)。
- ❌ Meilisearch:非常简单:AND 和短语搜索。没有渗透搜索。
- 搜索相关性
- 存储
- ✅ Manticore:针对小型/中型数据集的行式存储,针对大型数据集的列式存储,具有更低的 RAM 要求。
- ❌ Meilisearch: LMDB 具有所有优缺点和后果:例如,9.1 MB 数据集的 205GB 虚拟内存要求似乎很奇怪。
- 索引大小和数据加载
- ✅ Manticore 采用列式和行式索引方法,适应大型数据集。轻松从 MySQL、PostgreSQL、MS SQL 和任何支持 ODBC、XML 和 CSV 的其他数据库同步数据。真正的实时事务插入、替换和删除。二进制日志。就地属性值更新。
- ❌ Meilisearch 在处理较大数据集时遇到困难,并在文档加载期间经历性能下降。您可以上传 CSV 和 JSON。仅支持异步添加文档。没有就地更新。
- 模式
- ✅ Manticore:自动模式。自动 ID。所有属性默认可过滤、可排序和可分组。
- ❌ Meilisearch:自动模式。ID 可以从文档中自动选择。所有字段默认可全文搜索,但属性不可过滤或排序。您必须在将数据加载到索引之前决定模式,以避免完全重新索引。
- 搜索性能
- ✅ Manticore 在搜索性能上优于 Meilisearch。
- ❌ Meilisearch 不太适合需要快速和可扩展搜索功能的应用程序。
- 高可用性
- ✅ Manticore:复制,支持远程代理的分布式表和镜像,以及多种 HA 策略。
- ❌ Meilisearch:没有复制,没有分布式搜索,没有镜像。
- 拼写容错
- ✅ Meilisearch 提供更简单的拼写容错。
- ❌ Manticore 可以处理拼写容错,但在应用程序中需要更高的努力。
- 搜索预览
- ✅ Meilisearch 具有有用的搜索预览 - 内置 UI 用于在实例中搜索数据。
- ❌ Manticore 没有此功能。
- 分词
- ✅ Manticore:高度灵活的分词:标记字符、混合字符、忽略字符、正则表达式分词规则等,词形、停用词、同义词、创建分词插件的选项、基于词干提取器和词形还原器的各种语言的形态学。
- ❌ Meilisearch:分词器取决于语言:大多数语言的 Unicode 分段器,中文、日文、希伯来文和泰文的特定分词器。同义词。停用词。
- 身份验证
- ✅ Meilisearch:内置身份验证。
- ❌ Manticore:没有内置身份验证。
- 接口
- ✅ Manticore:SQL 优先,您可以使用 MySQL 客户端连接。HTTP JSON 接口。用于极低响应时间的二进制接口。客户端支持:PHP、Python、JavaScript、Java、C#、Elixir、Golang。
- ❌ Meilisearch:HTTP JSON 接口。客户端支持:JavaScript、Python、PHP、Java、Ruby、Golang、C#、Rust、Swift、Dart。
- 用例
- ✅ Manticore:日志搜索、电子商务平台、内容丰富的网站、企业应用程序。
- ❌ Meilisearch:具有有限数据和搜索需求的小型项目。
用例
Manticore Search 的用例
- 电子商务平台: Manticore Search 可以高效管理大型产品目录,为客户提供相关的搜索结果,具有其 高级分面功能 。这提高了转化率,增强了整体购物体验,使其成为电子商务平台非常受欢迎的功能。
- 内容丰富的网站: Manticore Search 可以索引和搜索广泛的内容库,例如新闻网站、博客或知识库。通过适当的全文排名,确保用户快速有效地找到所需信息,从而提高用户参与度。
- 企业应用程序: Manticore Search 的可扩展性和高级搜索能力使其非常适合大规模企业应用程序,包括客户关系管理(CRM)系统、文档管理系统和内部网门户,在这些应用中,准确和高效的搜索功能至关重要。
- 日志搜索: Manticore Search 非常适合在日志中搜索,因为它可以高效处理和搜索大量日志。其速度和性能使其成为日志分析和监控的优秀选择。
Meilisearch 的用例
小型项目:Meilisearch 的轻量级特性和易于部署使其适合数据和搜索需求有限的小型项目,例如小型电子商务、个人网站、本地目录或简单的 Web 应用程序,在这些项目中,快速数据加载、高级搜索功能和可扩展性不是关键因素。
结论
在为您的项目选择搜索引擎时,考虑搜索相关性、可扩展性和性能等因素至关重要。Manticore Search 在多种应用和用例中脱颖而出,确保无论数据集大小如何,都能实现最佳搜索性能和相关性。其先进的搜索和分析能力使其成为对高性能搜索功能有需求的项目的可靠选择。
Meilisearch 适合于小型项目,其中高级搜索功能和可扩展性不是关键因素。
最终,Manticore Search 和 Meilisearch 之间的选择将取决于您的具体需求和项目要求。
