两者都是在Apache Software License下发布的。

 

Solr是真正开源 - 社区胜于代码。任何人都可以贡献Solr代码,新的Solr开发者(aka committers)择优选出。 Elasticsearch在技术上是开源的,但在精神上却少一些。任何人都可以看到源代码,任何人都可以改变它,并提供贡献,但只有Elasticsearch员工才能真正改变Elasticsearch。

 

Solr的贡献者和提交来自多个不同的组织,而Elasticsearch提交者是从一个单一的公司。

许多组织都选择了Solr超过了Elasticsearch作为他们搜索(例如Cloudera,Hortonworks,MAPR等),即使他们也是Elasticsearch合作伙伴。

 

Solr和Elasticsearch都有活跃的用户和开发者社区,并正在迅速发展。

 

如果您需要添加一个Solr的或Elasticsearch都没有的功能,最好选用Solr,虽然它有Solr JIRA问题,但至少他们还是开放的,不是封闭的。

 

两者均具有良好的商业支持(咨询,生产支持,集成等)

 

两者周围都有很好的操作工具,即使是 Elasticsearch,因为它更易于使用的API,吸引了更多的开发者,从而使得它周围工具的生态系统非常活跃。

 

Elasticsearch在开源日志管理方面处于主导地位 - 大量的组织用Elasticsearch索引他们的日志,使日志可搜索。虽然Solr的现在可以用于此,但是它在这方面错失了先机。

 

Solr更多以文本搜索为主。然而Elasticsearch通常用于过滤和分组 - 分析查询工作 – 不只是文本搜索。 Elasticsearch开发者投入了大量的精力在Lucene和Elasticsearch上来提高查询效率。因此,Elasticsearch不仅提供文本搜索,而且可以进行复杂的查询。

 

在性能方面,它们是大致相同的。我说“大致”,因为从来没有人做过全面的、不带偏见的基准测试。在性能方面,对于95%使用场景来说,选择二者都可以,剩余的5%需要测试,根据特定的数据和特定接入模式来决定。

 

从操作上讲,Elasticsearch更容易一点儿 - 它只是一个单一的过程。 Solr,与Elasticsearch分布式对应的是 SolrCloud,依赖于Apache ZooKeeper。ZooKeeper是超级成熟、超广泛应用。

 

虽然Elasticsearch内置了与ZooKeeper类似的组件Zen,ZooKeeper更有效对于防止Elasticsearch集群中可怕的脑裂问题。平心而论,Elasticsearch开发人员意识到这个问题,正在改善Elasticsearch的这方面。

 

如果您已经投入了大量的时间在Solr中,坚持下来,除非有特殊的solr处理不好的使用场景。

如果你强烈坚持真正开源的话,Solr比Elasticsearch更接近。

如果你存储数据时,除了文本搜索之外,还需要进行分析查询,Elasticsearch是目前一个更好的选择。

 参考:Solr vs. Elasticsearch — How to Decide? January 30, 2015 by MICK EMMETT