先简单说一下Lucene

Lucene是一套信息检索工具包!jar包!不包含搜索引擎系统!
包含的:索引结构!读写索引的工具!排序,搜索规则…工具类!
Lucene和ElasticSearch关系:
ElasticSearch是基于Lucene做了一些封装和增强。
ElasticSearch概述
ElasticSearch,简称es,es是一个开源的高扩展的分布式全文检索引擎,它可以近乎实时的存储,检索数据;本身扩展性很好,可以扩展到上百台服务器,处理PB级别的数据,es也可以使用Java开发并使用Lucene作为其核心来实现所有索引和搜索的功能,但是他的目的是通过简单的Restful API来隐藏Lucene的复杂性,从而让全文搜索变得简单。

ES和solr的差别

ElasticSearch简介

  • ElasticSearch是一个实施分布式搜索和分析引擎。它让你以前所未有的速度处理大数据成为可能。
  • 它用于全文搜索、结构化搜索、分析以及将这三者混合使用:
  • 维基百科使用es提供全文搜索并高亮关键字,以及输入实施搜索和搜索纠错等搜索建议功能。
  • 英国公报使用es结合用户日志和社交网络数据提供给他们的编辑以实施的反馈,以便实时了解公众对新发表的文章的回应。
  • Github使用ElasticSearch检索1300亿行的代码。
  • ElasticSearch不仅用于大型企业,她还让DataDog以及Klout这样的创业公司将最初的想法变成可拓展的解决方案。
  • ElasticSearch可以在你的笔记本上运行,也可以在数以百计的服务器上处理PB级别的数据。
  • es是一个基于Apache Lucene™的开源搜索引擎。无论在开源还是专有领域,Lucene可以被认为是迄今为止最先进、性能最好、功能最全的搜索引擎库。
  • 但是,Lucene只是一个库,想要使用它,必须使用java来作为开发语言并将其直接集成到你的应用中,更糟糕的是,Lucene非常复杂,你需要深入了解检索的相关知识来理解它是如何让工作的。
  • ElasticSearch也使用Java开发并使用Lucene作为其核心来实现所有索引和搜索的功能,但是它的目的是通过简单的RESTFUL API来隐藏Lucene的复杂性,从而让全文搜索变得简单。

solr简介

  • Solr是Apache下的一个顶级开源项目,采用java开发,是基于Lucene的全文搜索服务器。Solr提供了比Lucene更为丰富的查询语言,同时实现了可配置、可扩展、并对索引、搜索性能进行了优化。
  • Solr它可以独立运行,运行在Jetty、Tomcat等这些容器中,Solr索引的实现方法很简单,用Post方法向Solr服务器发送一个描述Field及其内容的XML文档,Solr根据xml文档添加、删除、更新索引。Solr搜索只需要发送HTTP GET请求,然后对Solr返回XML、Json等格式的结果进行解析,组织页面布局。Solr不提供构建UI的功能,Solr提供了一个管理页面,通过管理页面可以查询Solr的配置和运行情况。
  • Solr是一个独立的企业级搜索服务器,实际上就是封装了Lucene。
  • Solr是一个独立的企业及搜索应用服务器,它对外提供类似于web-service的API接口。用户可以通过http请求,像搜索引擎服务器提交一定格式的文件,生成索引;也可以通过提出查找请求,并得到返回结果。

ElasticSearch和Solr比较

  • 当单纯的对已有数据进行搜索时,Solr更快
  • 当实时简历索引时,Solr会产生io阻塞,查询性能较差,ElasticSearch具有明显的优势
  • 随着数据量的增加,Solr的搜索效率会变得更低,而ElasticSearch没有明显变化。

总结

  • es基本是开箱即用(解压就可以用),非常简单。而solr会有点复杂。
  • Solr利用Zookeeper进行分布式管理,而elasticsearch自身带有分布式协调管理功能。
  • Solr支持更多格式的数据,比如json xml csv。而es只支持json文件格式。
  • Solr官方提供的功能更多,而elasticsearch更注重核心功能,高级功能由第三方插件提供,例如图形化界面需要kibana支撑。
  • Solr查询快,但更新索引时慢(即插入删除慢),用于电商等查询多的应用。
  • ES建立索引快(即查询慢),即实时性查询快,用于facebook新浪等搜索。
  • Solr较成熟,有一个更大,更成熟的用户、开发和贡献者社区,而elasticsearch相对开发维护者较少,更新太快,学习使用成本较高。