全文搜索属于最多见的需求,开源的 Elasticsearch 是目前全文搜索引擎的首选。html
基于Lucene它能够快速地储存、搜索和分析海量数据。维基百科、Stack Overflow、Github 都在采用它。java
另外一个选择是Solr,一样基于Lucene,Solr比ElasticSearch早几年面世,因此相对于Elasticsearch 更成熟和稳定。数据库
Elasticsearch 是一个开源的搜索引擎,创建在一个全文搜索引擎库 Apache Lucene™ 基础之上。apache
它使全文检索变得简单, 经过隐藏 Lucene 的复杂性,取而代之的提供一套简单一致的 RESTful API。编程
Elasticsearch 不只仅只是一个全文搜索引擎。 还具备以下功能:负载均衡
能够把ElasticSearch当作是一个搜索引擎数据库,有数据库知识便可快速入门框架
一、维基百科elasticsearch
二、Stack Overflow(国外的技术问答论坛)分布式
三、GitHub(开源代码管理),搜索上千亿行代码ide
四、电商网站,检索商品
五、日志数据分析,logstash采集日志,ES进行复杂的数据分析(ELK技术,elasticsearch+logstash+kibana)
主要用于近实时的全文搜索和数据分析
Apache Solr基于业界大名鼎鼎的java开源搜索引擎Lucene,Lucene更多的是一个软件包,还不能称之为搜索引擎,而solr则完成对lucene的封装,是一个真正意义上的搜索引擎框架。在过去的十年里,solr发展壮大,拥有普遍的用户群体。solr提供分布式索引、分片、副本集、负载均衡和自动故障转移和恢复功能。若是正确部署,良好管理,solr就可以成为一个高可靠、可扩展和高容错的搜索引擎。很多互联网巨头在使用,如Netflix,eBay,Instagram和Amazon(CloudSearch)。
二者在google中的搜索热度,在2013年后,Elasticsearch与Solr相比具备很大的吸引力,但Solr仍然很流行,Solr具备强大的开源社区支持。
相对来讲,Elasticsearch更易于安装和配置,学习成本更低。Solr的安装和配置比ElasticSearch要复杂一些。
Solr接受来自不一样来源的数据,包括XML文件,逗号分隔符(CSV)文件和从数据库中的表提取的数据以及常见的文件格式(如Microsoft Word和PDF)。
Elasticsearch 还支持其余来源的数据,例如ActiveMQ,AWS SQS,DynamoDB(Amazon NoSQL),FileSystem,Git,JDBC,JMS,Kafka,LDAP,MongoDB,neo4j,RabbitMQ,Redis,Solr和Twitter。还有各类插件可用。
Solr专一于文本搜索,而Elasticsearch则经常使用于查询、过滤和分组分析统计,Elasticsearch背后的团队也努力让这些查询更为高效。
所以当比较二者时,对那些不只须要文本搜索,同时还须要复杂的时间序列搜索和聚合的应用程序而言,毫无疑问Elasticsearch是最佳选择。
二者都支持使用停用词和同义词来匹配文档。
在Solr中,索引间进行join必须是单个分片和其余节点上的副本集进行关联来搜索文档间关系(例如SQL链接)。而Elasticsearch提供更高效的has_children和top_children查询来检索这样的相关文档。
Elasticsearch很是易于扩展,拥有足够多的须要大集群的使用案例。
Solr 基于Apache ZooKeeper也实现了相似ES的分布式部署模式。ZooKeeper是成熟和普遍使用的独立应用程序。
相对比,Elasticsearch有一个内置的相似ZooKeeper的名为Zen的组件,经过内部的协调机制来维护集群状态。
能够说Elasticsearch天生就是分布式的,是转为云而设计,是分布式首选。
Solr有一个普遍的开源社区。任何人均可以贡献给Solr,新的Solr开发人员或代码提交者只能根据功能选择。
Elasticsearch在技术上是开源的,全部贡献者均可以访问源代码,用户能够进行更改并提供。但最终的变化由Elastic(运行Elasticsearch和其余软件的公司)的员工确认和完成。所以,Elasticsearch更多地由单个公司驱动,而不是整个社区。
Solr贡献者和提交者跨越多个组织,而Elasticsearch提交者仅来自Elastic。还有人指出,Solr的强大社区有一个健康的项目管道和许多知名公司参与。这些成员还经过在整个开发和工程过程当中作出贡献来投资该平台。
二者都有很好的用户群和丰富的开发人员社区,但ElasticSearch相较于Solr更新。 Solr已经存在了更长的时间,因此它的生态系统是发达的,拥有更大的用户群。
-------------------------------
基于如下几个缘由,建议使用ElasticSearch
一、易于安装和配置,学习和使用成本较低(ElasticSearch入门简单,只要有数据库和编程知识,solr略复杂);
二、支持单机也支持分布式,内置了分布式组件,下降了学习和使用成本(Solr经过Apache ZooKeeper实现分布式,须要额外的学习成本);
三、除了搜索以外,ElasticSearch还支持实时的过滤、分析、统计功能,能够为咱们后续的功能扩展提供支持;
四、在建立索引的同时进行搜索,ElasticSearch比Solr更优,而咱们的场景须要实时的建立索引(Solr建立索引的时候会堵塞IO);
五、随着数据量增长ElasticSearch无明显的性能损失(Solr会明显变慢);
Solr vs. Elasticsearch谁是开源搜索引擎王者
http://www.javashuo.com/article/p-vawaofou-n.html
ElasticSearch和solr的差异