首先分别说明三者的概念:

Lucene是一套 信息检索工具包,并不包含搜索引擎系统,它 包含了索引结构、读写索引工具、相关性工具、排序等功能,因此在使用Lucene时仍需要关注搜索引擎系统,例如数据获取、解析、分词等方面的东西。而solr和elasticsearch都是基于该工具包做的一些封装。

Solr是一个有HTTP接口的基于Lucene的查询服务器,封装了很多Lucene细节,自己的应用可以直接利用诸如 .../solr?q=abc 这样的HTTP GET/POST请求去查询,维护修改索引。

Elasticsearch也是一个建立在全文搜索引擎 Apache Lucene基础上的搜索引擎。采用的策略是分布式实时文件存储,并将每一个字段都编入索引,使其可以被搜索。

Lucene使用上更加灵活,但是你需要自己处理搜素引擎系统架构,以及其他附加附加功能的实现。而Solr帮你做了更多,但是是一个处于高层的框架,Lucene很多新特性不能及时向上透传,所以有时候可能发现需要一个功能,Lucene是支持的,但是Solr上已经看不到相关接口。

然后说明三者之间的区别

首先说明三者之间的一个联系:solr和elasticsearch都是基于Lucene实现的!

其次

solr利用zookpper进行分布式管理,而elasticsearch自身带有分布式协调管理功能;

solr比elasticsearch实现更加全面,solr官方提供的工恩能够更多,而elasticsearch本身更注 重于核心功能,高级功能多由第三方插件提供;

solr在传统的搜索应用中表现好于elasticsearch,而elasticsearch在实时搜索应用方面比solr表现好!

最后有必要说明一下传统搜索和实时搜索:

传统搜索是从静态数据库中筛选出符合条件的结果,这种结果往往是不可变得、静态的。而实时搜索则是说用户对于搜索的结果是实时变化的。

1、先说说Lucene与elasticsearch关系?Lucene是一个开源的全文检索引擎工具包(类似于Java api),而Elasticsearch底层是基于这些包,对其进行了扩展,提供了比Lucene更为丰富的查询语言,可以非常方便的通过Elasticsearch的HTTP接口与底层Lucene交互。如果在应用程序中直接使用Lucene,你需要覆盖大量的集成框架工作,而使用ElasticSearch就省下了这些集成工作。一句话概括: Elasticsearch是Lucene面向企业搜索应用的扩展,极大的缩短研发周期。2、有没有必要先去学习Lucene?刚刚入门Elasticsearch,只需稍微了解下Lucene,无需去真正学习它,就可以很好的完成全文索引的工作,很好的进行开发。等自己熟练使用之后,可以反过头来学习Lucene里面底层的原理,也是一种提升。

因为Lucene是一个编程库,您可以按原始接口来调用。但是Elasticsearch是在它基础上扩展的应用程序,就可以直接拿来使用了。

---例子一定要看!!如下:---

例如:你直接拿汽车(Elasticsearch)来开,开好车就行,无需了解里面的发动机、各个组件(Lucene library)。后面你在去了解一些原理,对于修车等等会有帮助。