跳转到主要内容
Chinese, Simplified

搜索是任何应用程序的组成部分。当速度、性能和高可用性是核心需求时,对tb和pb级的数据执行搜索可能具有挑战性。这篇博客文章将讨论Solr和Elasticsearch这两个最受欢迎的开源搜索引擎,它们在过去几年的发展方向不同。

它们都构建在Apache Lucene之上,所以它们支持的特性非常相似。但是,它们在部署、可伸缩性、查询语言和许多其他功能方面存在显著差异。

关于Apache Solr

Apache Solr是构建在Lucene之上的开源搜索服务器,它通过HTTP请求提供Lucene的所有搜索功能。它已经存在了将近15年,是一个拥有广泛用户社区的成熟产品。

Solr提供强大的特性,如分布式全文搜索、面、近实时索引、高可用性、NoSQL特性、与Hadoop等大数据工具的集成,以及处理Word和PDF等富文本文档的能力。

关于Elasticsearch

Elasticsearch也是建立在Apache Lucene之上的开源搜索引擎,ELK的其余部分,也叫Elastic,包括Logstash和Kibana。它使用RESTful api扩展了Lucene强大的索引和搜索功能,并使用索引和碎片概念将分布的数据归档到多个服务器上。Elasticsearch完全基于JSON,适用于时间序列和NoSQL数据。

这个工具比Solr年轻得多,但由于其功能丰富的用例而获得了广泛的欢迎。它的一些主要特性包括分布式全文分布式搜索、高可用性、强大的查询DSL、多租户、Geo搜索和水平伸缩。

相对受欢迎程度

db - engine根据数据库管理系统和搜索引擎的受欢迎程度对它们进行排名,根据db - engine, Elasticsearch排名第一,Solr排名第三。

Solr在其诞生的前10年就已经很受欢迎,但Elasticsearch自2016年以来一直是最受欢迎的搜索引擎。

图1:db - engine排序elasticsearch与Solr流行度(来源:db - engine)

安装和配置

Java是安装这两个引擎的主要先决条件,但是默认的Elasticsearch配置需要1GB的堆内存。这可以在jvm中更改。配置目录中的选项文件。

默认情况下,Solr至少需要512MB堆内存来分配给实例。该设置可以在solr脚本文件或solr.in中更改。cmd文件。这两个文件都位于Solr安装的bin目录中。

Elasticsearch易于安装和配置,但它比Solr要重一些。Elasticsearch的最新版本(7.7.1版本,于2020年6月发布)的压缩大小为314.5MB,而Solr(8.5.2版本,于2020年5月发布)的压缩大小为191.7MB。

在Elasticsearch中的配置文件以YML格式编写。Solr支持基于xml的配置文件。

索引和搜索

Solr和Elasticsearch都在Lucene写索引。但是,由于分片和复制(以及其他特性)存在差异,因此它们的文件和架构也存在差异。此外,Elasticsearch具有原生DSL支持,而Solr具有与Lucene语法一致的健壮标准查询解析器。

数据源

这两种工具都支持广泛的数据源。

Solr使用请求处理程序从XML文件、CSV文件、数据库、Microsoft Word文档和pdf中摄取数据。通过对Apache Tika库的本机支持,它支持从一千多种文件类型中提取和索引。Solr附带一个简单的命令行post。例如,要在名为testcollection的集合中摄取基于csv的数据,您只需使用以下命令:

bin/post -c testcollection *.csv

另一方面,Elasticsearch完全是基于jsf的。它支持使用Beats系列(弹性堆栈中可用的轻量级数据传输程序)和Logstash从多个源摄取数据。

用例

虽然这两个产品都是面向文档的搜索引擎,但Solr一直更侧重于使用高级信息检索(IR)进行面向企业的文本搜索。因此,它更适合使用大量静态数据的搜索应用程序。Solr更适合已经实现大数据生态系统工具(如Hadoop和Spark)的企业应用程序。此外,Solr在处理富文本格式(RTF)文档方面非常出色。为了与Elasticsearch竞争,最近的Solr版本提供了一些新特性,比如并行SQL接口和流表达式。

Elasticsearch更侧重于缩放、数据分析和处理时间序列数据,以获得有意义的见解和模式。它的大规模日志分析性能使它非常受欢迎。Elasticsearch更适合以JSON格式输入和输出数据的现代web应用程序。Elasticsearch也投入了大量的开发工作,使其工具更具弹性。这将它转换为主数据存储。

搜索

Solr和Elasticsearch都支持NRT(接近实时)搜索,并充分利用了Lucene的所有搜索功能。由于它们都支持基于json的查询DSL,因此它们都具有附加的与搜索相关的特性集,如下所述。

早期的Solr版本必须依赖于它的标准查询解析器,但是Solr现在还支持基于jsf的查询DSL。虽然Solr的标准查询解析器允许用户创建各种结构化查询,但在编写这些查询时出现语法错误的几率要高得多。然而,您可以在Solr中编写在Elasticsearch中不可用的非常复杂的搜索查询。Solr包括一个名为Velocity search的示例搜索UI,它提供了强大的特性,如搜索、显示、突出显示、自动完成和地理搜索。

Elasticsearch的DSL是原生的。Elasticsearch中的聚合框架功能强大,api中的聚合查询具有更好的缓存。该工具的最新版本提供了更好的内存占用管理。

索引

因为Elasticsearch是无模式的,所以很容易索引非结构化数据和动态字段,而无需预先定义索引的模式。早期的Solr版本在索引数据之前需要一个已定义的模式。但是,Solr现在支持无模式模式。

这两个搜索引擎都支持自定义分析程序、基于同义词的索引、词根分析和各种记号化选项。

可伸缩性和分布式

搜索引擎必须快速处理大量的数据和对数以亿计的记录集的复杂查询。有时候,这些查询可能非常耗费资源,以至于可能会导致整个系统崩溃——尤其是在您没有提前计划负载并且无法快速伸缩的情况下。因此,搜索引擎本质上必须具有可伸缩性和容错能力。

集群、分片和再平衡

Elasticsearch和SolrCloud都提供对分片的支持。但是,由于Elasticsearch的设计考虑了水平伸缩,因此它对伸缩和集群管理提供了更好的支持。它的缺点是,尽管您可以使用收缩API来减少索引的切分,但切分一旦创建,就不能增加。SolrCloud支持进一步拆分现有的切分,但不支持收缩切分。

Elasticsearch内置的zen discovery模块处理集群协调。SolrCloud需要Apache Zookeeper,这是一个额外的服务。

在出现切分或节点故障时,Elasticsearch会自行进行集群再平衡,很少需要手动干预。在SolrCloud中,再平衡是复杂而难以管理的。

社区

Solr拥有一个广泛的开源社区。任何人都可以为Solr做出贡献,新的Solr开发人员或代码提交者是根据能力选出的。Elasticsearch技术上是开源的,但并不完全开放。所有贡献者都可以访问源代码,用户可以进行更改并贡献它们。但最终的变更会得到Elastic(运行Elasticsearch和其他软件的公司)员工的确认。因此,Elasticsearch更多的是由单个公司驱动,而不是整个社区。这还不包括Elasticsearch提供的非开放的高级特性(以及Elastic/ELK栈))。

回到2010年代中期,Solr贡献者和提交者跨越多个组织,而Elasticsearch提交者仅来自弹性组织。Solr强大的社区拥有健康的项目管道和许多知名公司的参与。这些成员还在整个开发和工程过程中对平台进行投资。

在过去的五年里,这种情况发生了巨大的变化。Elasticsearch的贡献者社区和用户基础得到了极大的发展。到目前为止,它是本世纪20年代初DevOps中最流行的开源时间序列数据库和搜索引擎。

从历史上看,两者都拥有强大的用户基础和丰富的开发人员社区,但Elasticsearch已经超过了Solr。Solr已经存在了很长一段时间,但是它的生态系统已经停滞不前,即使在拥有了良好的开发和更大的用户基础之后。

文档

在这一点上,Elasticsearch文档胜出。Elasticsearch的官方网站不仅提供了条理清晰、高质量的文档和清晰的示例,而且由于该工具的普及,互联网上充斥着书籍和指南。在过去的四年里,Elasticsearch加强了文档的编制,使其超越了组织。此外,它还提供了很好的示例和清晰的配置说明。

相比之下,Solr文档是缺乏的。Solr api的总体覆盖范围很小,很难找到好的技术示例和教程。以前是相反的:Solr是一个文档非常完善的产品,具有清晰的API用例示例和上下文。然而,它的文档维护已经落后,许多用户注意到差距。

概要:Solr vs Elasticsearch

要在这两种技术中选择一个明显的赢家,需要完全理解它们所支持的用例、它们的特性集、它们提供的伸缩选项以及它们的易于维护。

下面是每个工具属性的总结:

 

  Solr Elasticsearch
安装和配置 易于启动和运行和非常支持的文档 易于启动和运行与非常支持的文档。有几个包可用于各种平台。
搜索和索引 适合文本搜索和接近大数据生态系统的企业应用 作为文本搜索和分析引擎都很有用,因为它有强大的聚合模块
可伸缩性和集群 支持从Solr云和Apache Zookeeper依赖集群协调 更好的固有的可伸缩性;为云部署设计最佳方案
社区 历史上的大生态系统 一个蓬勃发展的自由/开源软件版本Elasticsearch和ELK堆栈的生态系统
文档 不完整的,过时的 Well-documented

 

这两种技术都很容易开始使用。Solr在信息检索领域提供了很好的功能,但是Elasticsearch更容易投入生产和扩展。在选择工具时,请确保查看您的需求,并为您的特定用例做出最佳选择。

 

原文:https://logz.io/blog/solr-vs-elasticsearch/

本文:http://jiagoushi.pro/node/1151

讨论:请加入知识星球【首席架构师圈】或者小号【jiaoushi_pro】

Tags
 
Article
知识星球
 
微信公众号
 
视频号