类似Elasticsearch搜索引擎项目的比较
内容提要
搜索引擎是一种可以搜索已被全文索引的数据中的任何文本的软件。Elasticsearch/OpenSearch、Algolia、Meilisearch、Typesense、Apache Solr、Sphinx、Manticore和Sonic是常用的搜索引擎。Bluge是一个简单易用的搜索引擎库。Zinc是一个构建在bluge之上的全文搜索引擎。
延伸解读
内存与磁盘搜索引擎的选型逻辑
文章将搜索引擎分为内存型和磁盘型两类。内存型如 Algolia、Meilisearch、Typesense 将索引放在内存中,响应可低于 50 毫秒,适合即时搜索和数百万条记录的场景,但不适合日志类大数据。磁盘型如 Elasticsearch/OpenSearch、Manticore、Sphinx 可处理数 TB 数据,良好配置下数 GB 数据搜索可在 100 毫秒内完成。选型时应先根据数据规模和延迟要求确定类别。
开源许可与托管方式的实际影响
Elasticsearch 在 2021 年将许可从 Apache 2.0 改为 SSPL,促使 AWS 等基于 7.10.2 分支创建了 Apache 2.0 的 OpenSearch。Algolia 仅作为服务提供,不能自托管,且按记录数和搜索量定价,存储大量数据成本高。Typesense 和 Meilisearch 是开源可自托管的,但 Meilisearch 尚未提供高可用模式。选择时需权衡许可限制、托管成本和运维能力。
特殊设计带来的适用边界
Sonic 不存储完整文档,只返回文档 ID,需要另一个数据存储来获取实际内容,且不提供 HTTP 接口,使用自有协议。因此它适合数据已存在于 MySQL/Postgres/DynamoDB 等存储中的场景,若希望将数据直接摄入 Sonic 则不合适。Quickwit 基于 Tantivy,有高性能但要求严格 schema,并将数据存储在 S3 上实现存储计算分离。这些设计决定了它们不适合通用场景。
索引库与完整搜索引擎的区别
文章提醒索引库不是现成应用,通常只能在编写它们的语言中使用。Lucene 是最流行的 Java 库,不强制严格 schema,Elasticsearch 和 Solr 都基于它。Tantivy 速度快但要求严格 schema。Bluge 是 Bleve 的继承者,使用简单,支持磁盘和内存索引且资源需求低,适合新项目。Zinc 构建在 Bluge 之上,提供无模式索引、低资源占用和与 Elasticsearch 兼容的 API,适合想从 Elasticsearch 迁移的轻量场景。
Q&A
Elasticsearch 和 OpenSearch 有什么区别?
Elasticsearch 由 Elastic 公司支持,2021 年 1 月将许可证从 Apache 2.0 改为 SSPL(非 OSI 批准)。因此 AWS 等公司基于 Elasticsearch 7.10.2(最后一个 Apache 2.0 版本)创建了分支 OpenSearch,采用 Apache 2.0 许可证,并提供托管服务(Amazon OpenSearch)。两者都基于 Apache Lucene,且资源消耗较大。
内存搜索引擎和磁盘搜索引擎分别适合什么场景?
内存搜索引擎(如 Algolia、Meilisearch、Typesense)将索引存储在内存中,搜索速度极快(通常低于 50 毫秒),适合即时搜索、数据量较小(数百万条记录)的应用。磁盘搜索引擎(如 Elasticsearch/OpenSearch、Manticore、Sphinx)在磁盘上搜索大量数据(可达数 TB),响应速度稍慢但通过良好配置可在 100 毫秒内搜索数 GB 数据,适合日志等大数据场景。
Typesense 和 Meilisearch 有哪些主要区别?
Typesense 用 C++ 编写,开源(AGPL),速度快且资源消耗低,支持通过 Raft 实现高可用(HA)模式,并提供 Docker 镜像和托管云服务。Meilisearch 用 Rust 编写,开源,与 Typesense 类似,但尚未提供高可用模式,因此不适合需要高可用性的场景。
Sonic 搜索引擎有什么特殊之处?
Sonic 用 Rust 编写,开源(MPL)。它不存储索引的完整文档,搜索时只返回文档 ID,需要从另一个数据存储(如 MySQL、Postgres)获取完整文档。它不提供 HTTP 接口,而是使用 Sonic 协议,并提供多语言客户端库。适合数据已存储在其他数据库中的场景。
Bluge 是什么?它适合新项目吗?
Bluge 是一个简单易用的搜索引擎库,由 Bleve 的创建者 Marty 开发,是 Bleve 的继承者。它支持基于磁盘和内存中的索引,资源要求非常低,功能丰富。如果你要开始新项目,推荐从 Bluge 开始。
Zinc 搜索引擎有哪些主要特性?
Zinc 是一个用 Go 构建的开源全文搜索引擎,基于 Bluge 索引库。特性包括:无模式索引、资源利用率低、易于使用的轻量级 GUI、内置身份验证、简单的编程 API,以及与 Elasticsearch API(单记录和批量摄取)兼容,便于从 Elasticsearch 迁移。