聊聊那些小而美的开源搜索引擎
今天,我们不聊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致力于为所有类型的开发者服务。我们的目标是提供一个对开发者友好的工具,易于安装和部署。因为为终端用户提供开箱即用的绝佳搜索体验对我们来说很重要,我们希望让每个人都能以最小的努力获得最好的搜索体验,并且不需要太大的资金投入。
