Algolia vs ElasticSearch vs Meilisearch vs Typesense 之比较
此表旨在为你提供每个搜索引擎中关键功能的客观并排比较,它们是基于每个搜索引擎的文档。
本文努力在下面提供准确的信息,但如果你发现任何问题,可以留言交流。
概述
Typesense | Algolia | ElasticSearch | Meilisearch | |
---|---|---|---|---|
源码 | 完全开源 | 专有闭源 | 源码可得,SSPL 许可证 | 完全开源 |
首次提交 | 2015 | 2012 | 2010 | 2018 |
语言 | C++ | C++ | Java | Rust |
核心搜索算法 | 从头构建 | 从头构建 | 基于 Lucene 构建 | 从头构建 |
适合场景 | 即时的键入搜索体验,适合 RAM,可容纳高达 24 TB(或当前商用 RAM 大小)的数据集。 | 即时的键入时搜索体验,可容纳高达 128 GB的数据集。 | PB 级数据集上的通用搜索和聚合(例如:日志数据) | 在不需要高可用容错设置的用例中提供即时键入搜索体验。建议提供足够的 RAM,将整个数据集保存在 RAM 中,以获得理想的性能。 |
主要索引位置 | RAM | RAM | 磁盘、RAM 缓存 | 带有内存映射文件的磁盘 |
部署
Typesense | Algolia | ElasticSearch | Meilisearch | |
---|---|---|---|---|
自托管选项 | ✅️ | ❌ | ✅️ | ✅️ |
SaaS选项 | ✅️ | ✅️ | ✅️ | ✅️ |
高可用 / 容错 | ✅ 基于 RAFT 的多节点集群 | ✅ 基于 RAFT 的多节点集群 | ✅ 主从复制 | ❌ 仅支持单节点设置,这会产生单点故障,因此无法容错/生产就绪。 |
支持 GPU 加速 | ✅ 可以选择使用 GPU(如果可用) | ❌ | ❌ | ❌ |
类似于 CDN 的 Geo-分布式集群 | ✅ 支持自托管和 SaaS 选项,称为搜索交付网络 | ✅ 高级版中可用,称为分布式搜索网络 | ❌ 不作为托管服务的一部分提供 | ❌ |
运行时依赖 | 无。自包含的二进制文件。 内置高性能 HTTP 服务器,可直接暴露给前端。 | 不适用,因其是 SaaS 服务 | 需要 JVM 及应用后台。 无法直接暴露给前端,需要 nginx、apache 或类似的服务器作为反向代理 | 无。自包含二进制文件。 内置高性能 HTTP 服务器,可直接暴露给前端。建议前端使用 nginx、apache 或类似的服务器作为反向代理,以管理 SSL 证书的续约。 |
索引向后兼容性 | ✅ 完全向后兼容 | N/A 作为 SaaS 服务,Algolia 不暴露这些细节给最终用户。 | ✅ 向后兼容最多1个主要版本。 | ✅ 完全向后兼容 |
升级路径 | 替换二进制文件,重启进程。无需重新索引。 | 托管的 SaaS 服务,不需要升级。 | 替换二进制文件,重启进程。如果升级超过1个主要版本,则需要重新索引。 | 创建 dump,替换二进制文件,加载 dump。 |
特性
Typesense | Algolia | ElasticSearch | Meilisearch | |
---|---|---|---|---|
REST API | ✅️ | ✅️ | ✅️ | ✅️ |
拼写容错 | ✅️ | ✅️ | ✅️ 较慢且影响相关性 | ✅️ |
查询字段权重 & 提升 | ✅️ | ❌ | ✅️ | ❌ |
Scoped API Key & 多租户索引 | ✅️ | ✅️ | ❌ | ✅ |
联合多索引搜索 | ✅️ | ✅️ | ✅️ | ✅️ |
Grouping / Distinct | ✅️ | ✅ 最多一个 distinct 字段 | ✅️ | 🔶 最多一个 distinct 字段,不支持分组 |
JOIN 跨多个索引 | ✅️ | ❌ | ❌ | ❌ |
动态排序 | ✅ 排序字段可以在查询时使用单个索引定义 | 🔶
| ✅ 排序字段可以在查询时使用单个索引定义 | ✅ 排序字段需要预先定义,但可以在查询时使用单个索引进行更改。 |
Faceting & Filtering | ✅️ | ✅️ | ✅️ | ✅ |
按照过滤分数排名 | ✅️ | ✅️ | ❌ | ❌ |
Facet Value Searches | ✅️ | ✅️ | ❌ | ✅️ |
Result Pinning / Merchandising | ✅️ | ✅ 免费版最多 10 条结果,高级版最多 10,000 条结果 | ✅️ 只有在闭源版本中可用 | ❌ |
同义词 | ✅️ | ✅️ 高达 10,000 每个索引 | ✅️ | ✅️ |
动态同义词建议 | ❌️ | ✅️ 高级版中可用 | ❌ | ❌ |
支持语言 | 所有语言 | 所有语言 | 所有语言 | 所有语言 |
禁用词 | ✅ | ✅️ | ✅️ | ✅️ |
词干提取 | ✅ | ✅️ | ✅️ | ❌ |
地理搜索 | ✅ | 🔶 仅限于一个地理点 | ✅️ | 🔶 仅限于一个地理点 |
记录 ID 自动生成 | ✅ | ✅️ | ✅️ | ❌ ID 需要预先生成 |
按字符串字段排序 | ✅ 每个搜索查询最多 3 个 tie-breaking 排序字段 | ✅ 但不推荐 | ✅️ | ✅ |
搜索分析 | 客户端及服务端 | 客户端及服务端 | ❌ | ❌ |
记录 Schema 验证 | ✅️ | ❌ | ✅ 强制映射 | ❌ |
Schemaless | ✅ 需要启用自动 schema 检测。 | ✅ | ✅ 强制映射 | ✅ |
自定义排名规则 | ✅ | ✅️ | ✅️ | ✅️ |
负向关键字搜索 ( -query ) | ✅️ | ✅️ | ✅️ | ❌ |
短语搜索 ( "some query" ) | ✅ | ✅️ | ✅️ | ✅ |
向量搜索 (近邻搜索) | ✅ | ❌ | ✅️ | ❌ |
语义搜索 | ✅ | ✅ 称为 NeuralSearch | ❌ | ❌ |
相似搜索 | ✅ 可以使用向量搜索实现 | ❌ | 可以使用向量搜索实现 | ❌ |
图片搜索 | ✅ 内置 CLIP 集成 | ❌ | ❌ | ❌ |
语音搜索 | ✅ 内置 Whisper 集成 | ❌ | ❌ | ❌ |
会话式 Q&A 搜索 | ✅ 内置 RAG 管道并与 OpenAI 和 Cloudflare LLMs 集成 | ❌ | ❌ | ❌ |
推荐 | 🔶️ 非开箱即用,不过可用适应向量搜索实现 | ✅ | 🔶️ 非开箱即用,不过可用适应向量搜索实现 | ❌ |
用户级搜索定制 | 🔶️ 非开箱即用,不过可用适应向量搜索实现。 | ✅ 高级版功能 | ❌ | ❌ |
集合别名 | ✅️ | ❌ | ✅️ | ❌ |
集合置换 | ✅️ | ✅️ | ✅️ | ✅️ |
A/B 测试结果 | 🔶️ 可通过基于 AB 测试置换集合及 Bucket 的搜索参数实现 | ✅ 高级版功能 | ❌ | 🔶️ 可通过基于 AB 测试置换集合及 Bucket 的搜索参数实现 |
查询建议 | ✅️ | ✅️ | ❌ | ❌ |
可视化面板 | ✅ 在 Typesense Cloud 云上 | ✅️ | 🔶️ 第三方插件 | ✅️ 仅搜索 |
网站爬虫 | ✅ DocSearch 爬虫用于文档站 | ✅ DocSearch 爬虫用于文档站。 高级版有通用网站爬虫。 | ❌ | ✅ DocSearch 爬虫用于文档站。 |
搜索 UI 组件库 | ✅
支持 InstantSearch.js | ✅ InstantSearch.js | ✅ 搜索 UI,需要托管搜索 | ✅ InstantSearch.js 的 Forked 版本 |
隐私友好 | ✅ 不收集自托管和 SaaS 选项中的使用分析或个人数据。 | 🔶 收集个人数据,使用分析及 IP 地址。 | 🔶
| 🔶 收集硬件信息、总文档数、文档更新数量、服务器正常运行时间、搜索设置等。支持 Opt-Out。 |
限制
Typesense | Algolia | ElasticSearch | Meilisearch | |
---|---|---|---|---|
文档数量 | 无限制,只会被可用 RAM 约束 | 未知 | 无限制,只会被可用磁盘空间约束 | 无限制,只会被可用磁盘空间约束,性能则受可用 RAM 约束。 |
索引最大数量 | 无限制 | 无限制 | 无限制 | Linux/MacOS 中为 200,Windows 中为 20 |
最大索引容量 | 无限制,只会被可用 RAM 约束 | 128 GB | 无限制 | 500GB |
每个字段最大单词数 | 无限制 | 无限制 | 无限制 | 无限制 |
记录最大容量 | 无限制 | 10KB | 无限制 | 2GB |
API Key 数量 | 无限制 | 5000 | 无限制 | 无限制 |
支持
Typesense | Algolia | ElasticSearch | Meilisearch | |
---|---|---|---|---|
频道 | GitHub issues Public Slack Community Phone Private Slack Paid Prioritized Support | GitHub issues Public Slack Community Phone Paid Prioritized Support | GitHub issues Public Slack Community Paid Prioritized Support | GitHub issues Public Discord Community |
支持时间 | 24 x 7 x 365 付费优先支持 | 周一 - 周五; 上班时间 用户时区 9am - 5pm 付费优先支持 | 24 x 7 x 365 白金级和企业优先支持 | 8am - 10pm (巴黎时间), 周一 - 周四 企业客户 |
Expert Onboarding & Training | ✅ | ✅ | ✅ | ❌ |