随着互联网行业的发展,搜索引擎已经深入到各行各业,已经是众多内容平台必不可少的功能。在实际业务中,当搜索的速度,性能和高可用性是核心要求时,对TB和PB的数据执行搜索可能会遇到挑战,此时就需要用到分布式全文检索。了解过搜索引擎的应该清楚,目前最热门的两款开源的搜索引擎,Solr和Elasticsearch都是非常不错的选择,但这两者应该如何选?是搜索新手面临的第一大问题。
它们都基于Apache Lucene构建,因此它们支持的功能非常相似。但是,它们在部署,可伸缩性,查询语言和许多其他功能方面有很大不同。本文就来比较比较这两款非常强大的搜索引擎。
?
?
关于Apache Solr
Apache Solr是建立在Lucene之上的开源搜索服务器,它通过HTTP请求提供Lucene的所有搜索功能。它已经存在了近十五年,使其成为具有广泛用户社区的成熟产品。Solr提供了强大的功能,例如分布式全文本搜索,近实时索引,高可用性,NoSQL功能,与诸如Hadoop的大数据工具集成以及处理诸如Word和PDF之类的富文本文档的功能。
?
关于Elasticsearch
Elasticsearch是基于Apache Lucene和ELK Stack(包括Logstash和Kibana)构建的开源搜索引擎。它使用RElasticsearchTful API扩展了Lucene强大的索引和搜索功能,并使用索引和分片概念在多台服务器上存档了数据分布。Elasticsearch完全基于JSON,适用于时间序列和NoSQL数据。
Elasticsearch比Solr还要年轻,但是由于其功能丰富的用例,它已经赢得了广泛的欢迎。它的一些主要功能包括分布式全文本分布式搜索,高可用性,功能强大的查询DSL,多租户,地理搜索和水平缩放。
?
搜索趋势使用率
Solr在2006年首次发布为开源版本,长期以来一直主导着搜索引擎领域,是任何需要搜索功能的人的首选引擎。它的成熟转化为丰富的功能,超越了普通的文本索引和搜索;如人脸识别、分组(即字段崩溃)、强大的过滤、可插入的文档处理、可插入的搜索链组件、语言检测等。
然后,在2010年左右,Elasticsearch横空出世。那时,它还远没有Solr那么稳定,没有Solr那样的功能深度,没有认同度和品牌等等。但是它有一些其他的优点:Elasticsearch还很年轻,建立在更现代的原则之上,针对更现代的用例,并使处理大索引和高查询率更容易。并且它当时主打近实时搜索,吸引了一波又一波的开发人员去选择它。
?
安装与配置
无论Solr还是Elasticsearch,底层都是Java实现的,所以需要配置java环境。
Elasticsearch配置需要1GB的HEAP内存,可以在config目录中的jvm.options文件中进行更改。默认情况下,Solr至少需要512MB的HEAP内存才能分配给实例。可以在Solr脚本文件或solr.in.cmd文件中更改此设置。
Elasticsearch中的配置文件以YML格式编写。Solr支持基于XML的配置文件。Elasticsearch易于安装和配置,但比Solr重很多。Elasticsearch的最新版本(2021年4月发行的7.12.0版)的压缩大小为312MB,而Solr(2021年2月发行的8.8.1版)的压缩大小为129MB。但对于分布式部署而言,Elasticsearch安装配置则会简单得多。
索引和搜索
Solr和Elasticsearch都是基于lucene建索引的。但是,由于分片和复制(以及其他功能)之间存在差异,因此它们的文件和体系结构也存在差异。此外,Elasticsearch具有本地DSL支持,而Solr具有与Lucene语法对齐的强大的Standard Query Parser。
数据源:Solr 支持更多格式的数据,而 Elasticsearch 仅支持json文件格式;
数据量:两者都可支持PB和TB级的索引查询,都可以通过分布式实现高可用,单个节点都可以支持2000w左右的文档索引查询,且效率非常高
近实时搜索:其实近实时的能力是Lucene的,所以Elasticsearch和Solr都实现了近实时搜索,只不过是由于Elasticsearch首先暴露了NRT搜索,所以人们才会将NRT搜索优先与Elasticsearch关联起来。
查询速度:两者都可做到分布式查询,硬要说哪个快其实没有什么道理,对于高手而言,两者都可符合生产需求,只不过Solr在建索引的时候会产生IO阻塞,查询性能会变差,所以对于新手而言,Elasticsearch或许是一个更好的选择,因为容易上手,配置比较简单,简单配置就可以实现高效率查询。
?
扩展和分布式
搜索引擎必须快速处理大量数据和对亿万条记录的复杂查询。有时,这些查询可能会占用大量资源,以至于它们可能导致整个系统瘫痪,尤其是如果您没有提前计划负载并且无法快速扩展。因此,搜索引擎必须具有可扩展性和容错性。
Elasticsearch 为分布式而生,而且它的设计隐藏了分布式本身的复杂性,因此它对扩展和集群管理提供了更好的支持。Elasticsearch虽然可以使用收缩API减少索引的分片,但是一旦创建它们就无法增加分片。
SolrCloud 是基于 Solr 和 Zookeeper 的分布式搜索方案。当你需要大规模,容错,分布式索引和检索能力时使用 SolrCloud。SolrCloud支持进一步拆分现有分片,但不支持分片的缩小。
在分片或节点故障的情况下,Elasticsearch会自行进行群集重新平衡,并且很少需要人工干预。在SolrCloud中,重新平衡是复杂且难以管理的。
?
社区和支持
Solr有一个广泛的开源社区。任何人仍然可以为Solr做出贡献,并且仅根据优点选出新的Solr开发人员或代码提交者。Elasticsearch在技术上是开源的,但并非完全开源。所有贡献者都可以访问源代码,用户可以进行更改并做出贡献。但是最终的变更会得到Elastic(运行Elasticsearch和其他软件的公司)员工的确认。因此,Elasticsearch更多地由单个公司而不是整个社区来驱动。更不用说Elasticsearch的非开放高级功能(通常是Elastic / ELK Stack)提供的数量。
总的来说:Solr 拥有更多、更成熟的用户、开发者和贡献社区。网上可以搜到大量文档,以及问题解决案例。Elasticsearch 虽然发布时间比Solr晚了几年,但是发展迅速,社区虽然小,但是很活跃。
?
结语
Solr和Elasticsearch运用非常广泛,基本所有互联网大厂都有使用上生产,并且做了很多改造用于商业化,当然也有很多公司自己开发搜索引擎,但原理底层都差不多,都需要用到倒排,正排,分布式等,只不过在实现上优化了开源搜索引擎的缺点,使其更加高效稳定。
但是对于中小公司,没办法投入更多的人力物力打造自己的搜索引擎,所以开源的solr和Elasticsearch是非常不错的选择,上手也快,功能齐全。Solr在信息检索领域提供了强大的功能,但是Elasticsearch更易于投入生产和扩展。在选择工具时,请确保查看您的要求并针对您的特定用例做出最佳选择。
?
最后欢迎关注同名微信公众号:药老算法(yaolaosuanfa),带你领略搜索、推荐等数据挖掘算法魅力。