首页
学习
活动
专区
工具
TVP
发布

聊聊那些小而美的开源搜索引擎

今天,我们不聊 ElasticSearch/Solr 这样的一些比较复杂的搜索引擎,聊聊一些新晋的小而美的搜索引擎框框架。

MeiliSearch vs. Elasticsearch

Elasticsearch 被设计成一个后端搜索引擎,尽管它一开始并不适合这个目的,但通常被用来为终端用户建立搜索栏。与 Elasticsearch 不同的是,Elasticsearch 是一个通用的搜索引擎,MeiliSearch 专注于提供一种特定的功能。

Elasticsearch 可以处理通过海量数据的搜索并进行文本分析。为了让它有效地用于终端用户的搜索,你需要花时间去了解 Elasticsearch 的内部工作方式,以便能够定制和调整它来满足你的需求。MeiliSearch 旨在提供针对终端用户的高性能即时搜索体验。然而,处理复杂的查询或分析非常大的数据集是不可能的。

如果你想提供一个完整的即时搜索体验,Elasticsearch 有时会太慢。大多数时候,与 MeiliSearch 相比,它返回搜索结果的速度明显较慢。如果你需要一个简单易行的工具来部署一个容许错别字的搜索栏,提供前缀搜索功能,让用户直观地进行搜索,并以近乎完美的相关性即时返回他们的结果,MeiliSearch 是一个完美的选择。

MeiliSearch vs. Algolia

MeiliSearch 的灵感来自于 Algolia 的产品和它背后的算法。我们确实研究了他们博文中描述的大部分算法和数据结构,以便实现我们自己的算法。因此,MeiliSearch 是一个基于 Algolia 的工作和近期研究论文的新搜索引擎。它提供了类似的功能,并且和它的前辈一样迅速地达到了相同的相关程度。

与 Algolia 不同的是,MeiliSearch 是开源的,并且是用 Rust 编写的,Rust 是一种系统级的现代编程语言,可以快速构建功能。Rust 还实现了可移植性和灵活性,这使得我们的搜索引擎在虚拟机、容器、甚至 Lambda@Edge 内的部署成为一种无缝操作。

Algolia 的主要资产之一是他们为客户提供的强大的全球基础设施。MeiliSearch 目前提供的是一个搜索引擎,还不能提供一个有竞争力的基础设施。然而,我们的目标是使其在部署和维护方面比 Algolia 的要简单得多。


开放源码

Lucene

Apache Lucene 是一个免费和开源的搜索库,用 Java 编写,用于文档的全文索引和搜索。这个项目由 Doug Cutting 于 1999 年首次创建,他之前曾在施乐公司的帕洛阿尔托研究中心(PARC)和苹果公司编写过搜索引擎。由于 Lucene 的开发是为了建立网络搜索应用程序,如谷歌,你可以看到 DuckDuckGo 仍然使用它进行一些特定的搜索。

Lucene 后来被分成了几个项目。

Lucene 本身:全文本搜索库。Solr:一个具有强大 REST API 的企业搜索服务器。Nutch:一个依靠 Apache Hadoop 的可扩展和可伸缩的网络爬行器。由于 Lucene 是许多开源或闭源搜索引擎背后的技术,它被认为是参考的搜索库。

Sonic

Sonic 是一个用 Rust 编写的轻量级和无模式的搜索索引服务器。Sonic 不能被认为是一个开箱即用的解决方案,与 MeiliSearch 相比,它不能保证相关性排名。事实上,它并不存储任何文档,而是由一个带有列文斯坦自动机的倒置索引组成,这意味着任何查询 Sonic 的应用程序都必须使用返回的 ID 从外部数据库检索搜索结果,然后应用一些相关度排名。它能够在几 MB 的 RAM 上运行,这使它成为数据库工具的一个极简和资源效率高的替代方案,因为数据库工具可能太过沉重而无法扩展。

#Typesense 和 MeiliSearch 一样,Typesense 是一个轻量级的开源搜索引擎,为速度而优化。我们目前正在重新评估它的特性和功能,以更好地了解它与 MeiliSearch 的比较。

Lucene 衍生品


Lucene-Solr

Solr 是 Apache Lucene 的一个子项目,由 Yonik Seeley 于 2004 年创建,如今是全球范围内使用最广泛的搜索引擎之一。Solr 是一个搜索平台,用 Java 编写,并建立在 Lucene 之上。换句话说,Solr 是一个围绕 Lucene 的 Java API 的 HTTP 包装器,这意味着你可以通过使用它来利用 Lucene 的所有功能。此外,Solr 服务器与 Solr 云相结合,提供分布式索引和搜索功能,从而确保高可用性和可扩展性。数据是共享的,但也是自动复制的。此外,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 致力于为所有类型的开发者服务。我们的目标是提供一个对开发者友好的工具,易于安装和部署。因为为终端用户提供开箱即用的绝佳搜索体验对我们来说很重要,我们希望让每个人都能以最小的努力获得最好的搜索体验,并且不需要太大的资金投入。

  • 发表于:
  • 本文为 InfoQ 中文站特供稿件
  • 首发地址https://www.infoq.cn/article/81b0927671b708e57bc69234c
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券