Solr vs. Elasticsearch谁是开源搜索引擎王者

当前是云计算和数据快速增加的时代,今天的应用程序正以PB级和ZB级的速度生产数据,但人们依然在不停的追求更高更快的性能需求。随着数据的堆积,如何快速有效的搜索这些数据,成为对后端服务的挑战。本文,咱们将比较业界两个最流行的开源搜索引擎,SolrElasticSearch。二者都创建在Apache Lucene开源平台之上,它们的主要功能很是类似,可是在部署的易用性,可扩展性和其余功能方面也存在巨大差别。html

关于Apache Solr

Apache Solr基于业界大名鼎鼎的java开源搜索引擎Lucene,Lucene更多的是一个软件包,还不能称之为搜索引擎,而solr则完成对lucene的封装,是一个真正意义上的搜索引擎框架。在过去的十年里,solr发展壮大,拥有普遍的用户群体。solr提供分布式索引、分片、副本集、负载均衡和自动故障转移和恢复功能。若是正确部署,良好管理,solr就可以成为一个高可靠、可扩展和高容错的搜索引擎。很多互联网巨头,如NetflixeBayInstagramAmazonCloudSearch)均使用Solrjava

solr的主要特色:算法

  • 全文索引
  • 高亮
  • 分面搜索
  • 实时索引
  • 动态聚类
  • 数据库集成
  • NoSQL特性和丰富的文档处理(例如Word和PDF文件)

关于Elasticsearch

与solr同样,Elasticsearch构建在Apache Lucene库之上,同开源搜索引擎。ElasticsearchSolr推出几年后才面世的,经过REST和schema-free(不须要预先定义 Schema,solr是须要预先定义的)的JSON文档提供分布式、多租户全文搜索引擎。而且官方提供Java,Groovy,PHP,Ruby,Perl,Python,.NET和Javascript客户端数据库

分布式搜索引擎包含能够华为为分片(shard)的索引,每个分片能够有多个副本(replicas)。每一个Elasticsearch节点能够有一个或多个分片,其引擎既同时做为协调器(coordinator ),将操做转发给正确的分片。apache

Elasticsearch可扩展为准实时搜索引擎。其中一个关键特性是多租户功能,可根据不一样的用途分索引,能够同时操做多个索引后端

Elasticsearch主要特性:架构

  • 分布式搜索
  • 多租户
  • 查询统计分析
  • 分组和聚合

热度对比 负载均衡

在开始比较前,咱们能够查看二者在google中的搜索热度,能够看出在2013年后,Elasticsearch与Solr相比具备很大的吸引力,但这并不意味着Apache Solr已经死了。虽然很多人不承认,但Solr仍然是最流行的搜索引擎之一,具备强大的开源社区支持。 框架

安装与配置 elasticsearch

相对来讲,Elasticsearch易于安装,与Solr相比很是轻量级。 Solr的分发软件包大小的当前版本(6.4.2)大约为150 MB,而Elasticsearch分发软件包大小的当前版本(5.2.2)仅为32.2MB。

可是,若是Elasticsearch管理很差,这种易于部署和使用可能会成为一个问题。基于JSON的配置很容易,但若是你想为文件中的每一个配置指定注释,那么它不适合你。Solr也提供了Rest API,能够经过集合API建立自定义分片集合,记录聚类算法和执行自定义分片。

总的来讲,若是你的应用程序使用JSON,那么Elasticsearch是一个更好的选择。不然,使用Solr,由于它的schema.xmlsolrconfig.xml有很好的文档。

索引和搜索

数据源

Solr接受来自不一样来源的数据,包括XML文件,逗号分隔符(CSV)文件和从数据库中的表提取的数据以及常见的文件格式(如Microsoft WordPDF)。

Elasticsearch还支持其余来源的数据,例如ActiveMQAWS SQSDynamoDBAmazon NoSQL),FileSystemGitJDBCJMSKafkaLDAPMongoDBneo4jRabbitMQRedisSolrTwitter。还有各类插件可用。

搜索

Solr专一于文本搜索,而Elasticsearch经常使用于查询过滤和分组分析统计Elasticsearch背后的团队也努力让这些查询更为高效所以当比较二者时,对那些不只须要文本搜索,同时还须要复杂的时间序列搜索和聚合的应用程序而言,毫无疑问Elasticsearch是最佳选择

索引

二者都支持使用停用词和同义词来匹配文档。

在Solr中,索引间进行join必须是单个分片和其余节点上的副本集进行关联来搜索文档间关系(例如SQL链接)。Elasticsearch提供更高效的has_children和top_children查询来检索这样的相关文档

可扩展性和分布式

搜索引擎须要处理数以百万级的文档,基于此搜索引擎应该是可复制的,模块化的和可扩展的,支持集群和分布式架构。

专为云而设计

Elasticsearch很是易于扩展,拥有足够多的须要大集群的使用案例

Solr 基于Apache ZooKeeper也实现了相似ES的分布式部署模式。ZooKeeper是成熟和普遍使用独立应用程序。

相对比,Elasticsearch有一个内置的相似ZooKeeper的名为Zen的组件,经过内部的协调机制来维护集群状态。

能够说Elasticsearch是转为云而设计,是分布式首选。

分片拆分和再平衡

shards是luence索引的分区单元,solr和elasticsearch均使用。你能够经过在集群中的不一样计算机上运行shard来分发索引。随着SolrCloud的引入,Solr开始支持shard拆分,这容许您经过拆分现有shard来添加更多shard。相比之下,ElasticSearch仍然不支持这一点,事实上,实际上阻止了这种作法。ES经过向设置中添加更多计算机,可使用自动碎片平衡功能。相比之下,Solr容许添加分片(使用隐式路由时)或分割(使用复合ID时),但不能删除分片。它容许您增长副本。在Elasticsearch中,默认状况下每一个索引具备五个分片。它不容许您更改主分片的数量,但它容许您增长副本的数量。分片再平衡对于水平扩容很是有用。当添加新机器时,它将自动从新平衡不一样机器中可用的分片。

社区

Solr有一个普遍的开源社区。任何人均可以贡献给Solr,新的Solr开发人员或代码提交者只能根据功能选择。 Elasticsearch在技术上是开源的,但不彻底。全部贡献者均可以访问源代码,用户能够进行更改并提供。但最终的变化由Elastic(运行Elasticsearch和其余软件的公司)的员工确认和完成。所以,Elasticsearch更多地由单个公司驱动,而不是整个社区。

Solr贡献者和提交者跨越多个组织,而Elasticsearch提交者仅来自Elastic。还有人指出,Solr的强大社区有一个健康的项目管道和许多知名公司参与。这些成员还经过在整个开发和工程过程当中作出贡献来投资该平台。

二者都有很好的用户群和丰富的开发人员社区,但ElasticSearch相较于Solr更新。 Solr已经存在了更长的时间,因此它的生态系统是发达的,拥有更大的用户群。

文档

Solr在这里得分很高。它是一个很是有据可查的产品,具备清晰的示例和API用例场景。 Elasticsearch的文档组织良好,但它缺少好的示例和清晰的配置说明。

Solr 仍是 Elasticsearch?

经过上面的对比,很难肯定谁是最终赢家。其实,不管选择Solr仍是Elasticsearch,你首先须要了解您的用户场景和将来的需求。咱们来总结一下:

请记住:

  • Elasticsearch因为其易用性而在较新的开发人员中更受欢迎
  • 可是若是你已经在使用solr了,请继续使用它,由于迁移到Elasticsearch并不会带来具体的优点
  • 若是您须要它来处理分析查询以及搜索文本,Elasticsearch是更好的选择,特别是收集日志,作分析处理(参考前面发的ELK 安装使用http://www.cnblogs.com/xiaoqi/p/elk-part1.html)

总之,二者都是功能丰富的搜索引擎,而且或多或少地给出相同的性能,只要它们被设计和实施得很好。 

本文主要内容为翻译http://logz.io/blog/solr-vs-elasticsearch/,感谢做者,感谢谷歌翻译!

相关文章
相关标签/搜索