初识ElasticSearch

一、市面上常见的搜索引擎

1、ElasticSearch

Elasticsearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。

Elasticsearch是用Java语言开发的,并作为Apache许可条款下的开放源码发布,是一种流行的企业级搜索引擎。

2、sphinx

Sphinx是一个基于SQL的全文检索引擎,可以结合MySQL、PostgreSQL做全文搜索,它可以提供比数据库本身更专业的搜索功能,使得应用程序更容易实现专业化的全文检索。

Sphinx特别为一些脚本语言设计搜索API接口,如Java,PHP,Python,Perl,Ruby等,同时为MySQL也设计了一个存储引擎插件,也是一款比较优秀的搜索引擎。但是Sphinx和ElasticSearch比起来,逊色不少。

在复杂查询逻辑下,Sphinx使用非常麻烦,在特定情况下,还需要修改Sphinx的源码才能实现需求,而我们ES天生就拥有非常丰富的Query DSL,可以满足几乎任何的检索情况

另一方面,在横向扩展和高可用方面,Sphinx实现分布式可谓是没事找抽型,它并不是做不到,而是实在是太难用了,而ES从一出生就是为分布式、集群化而生的,不仅方便横向扩展、动态增加节点。

3、solr

Solr是一个独立的企业级搜索应用服务器,它对外提供类似于Web-service的API接口。用户可以通过http请求,向搜索引擎服务器提交一定格式的XML文件,生成索引;也可以通过Http Get操作提出查找请求,并得到XML格式的返回结果。

solr4.0增加对mysql的支持,在配置文件里面配置mysql连接信息即可。Solr有一个更大、更成熟的用户、开发和贡献者社区。支持添加多种格式的索引,如:HTML、PDF、微软 Office 系列软件格式以及 JSON、XML、CSV 等纯文本格式,Solr比较成熟、稳定,不考虑建索引的同时进行搜索,速度更快。

但是建立索引时,搜索效率下降,实时索引搜索效率不高。虽然solr具备诸多优点,但是因为它建立实时搜索效率不高,而我们商品搜索对这个实时搜索效率是有要求的。

而且solr在国内应用较少,生态相较于es,也差了一筹。

4、solr与es比较

当单纯的对已有数据进行搜索时,Solr更快。当实时建立索引时, Solr会产生io阻塞,查询性能较差, Elasticsearch具有明显的优势。

随着数据量的增加,Solr的搜索效率会变得更低,而Elasticsearch却没有明显的变化

Solr要借助tomcat实现http请求,而es无需额外搭建tomcat;

Solr 利用 Zookeeper 进行分布式管理,而 Elasticsearch 自身带有分布式协调管理功能

Solr 支持更多格式的数据,而 Elasticsearch 仅支持json文件格式

Solr 在传统的搜索应用中表现好于 Elasticsearch,但在处理实时搜索应用时效率明显低于 Elasticsearch