聊一聊Solr,Elasticsearch及lucene的特点及应用场景
一 Lucene,solr及Elasticsearch
有必要先说一下LuceneLucene是一个高性能、可伸缩的信息搜索(IR)库。它可以为你的应用程序添加索引和搜索能力。Lucene是用java实现的、成熟的开源项目,是著名的Apache Jakarta大家庭的一员,并且基于Apache软件许可 [ASF, License]。同样,Lucene是当前非常流行的、免费的Java信息搜索(IR)库。它可以用于任何应用程序来搜索功能。 Lucene是开源项目。它是可扩展的,高性能的库用于索引和搜索几乎任何类型的文本。 Lucene库提供了所需的任何搜索应用程序的核心业务:索引和搜索。
而Solr和Elasticsearch都是基于lucene基础上,开发的搜索应用平台,各有各的应用场景和优缺点。
Solr是Apache Lucene项目的开源企业搜索平台,相对于Elasticsearch,在国内应用程度略低一些。 其主要功能包括全文检索、命中标示、分面搜索、动态聚类、数据库集成,以及富文本的处理。Solr是高度可扩展的,并提供了分布式搜索和索引复制。Solr是最流行的企业级搜索引擎,Solr4 还增加了NoSQL支持。Solr是用Java编写、运行在Servlet容器(如 Apache Tomcat 或Jetty)的一个独立的全文搜索服务器。 Solr采用了 Lucene Java 搜索库为核心的全文索引和搜索,并具有类似REST的HTTP/XML和JSON的API。Solr强大的外部配置功能使得无需进行Java编码,便可对 其进行调整以适应多种类型的应用程序。Solr有很强大的插件机制,支持更方便的功能定制和二次开发。
Elasticsearch是一个建立在全文搜索引擎 Apache Lucene™ 基础上的搜索引擎,可以说Lucene是当今最先进,最高效的全功能开源搜索引擎框架。相比于solr,在国内也是应用的最广的。 Elasticsearch使用Lucene作为内部引擎,但是在使用它做全文搜索时,只需要使用统一开发好的API即可,而不需要了解其背后复杂的Lucene的运行原理。Elasticsearch有很强的扩展性,可以很轻松的扩展到上百台服务器,处理PB级别的结构化或非结构化数据。
二 各自的应用场景及优缺点
Solr的优缺点
优点:
1. Solr有一个更大、更成熟的用户、开发和贡献者社区
2. 支持添加多种格式的索引,如:HTML、PDF、微软 Office 系列软件格式以及 JSON、XML、CSV 等纯文本格式。
3. Solr比较成熟、稳定
4. 不考虑建索引的同时进行搜索,速度更快
缺点:
建立索引时,搜索效率下降,应用于实时索引搜索效率不高。
Elasticsearch的优缺点
优点:
1. Elasticsearch是分布式的。不需要其他组件,分发是实时的。
2. Elasticsearch 完全支持 Apache Lucene 的接近实时的搜索。
3. 处理多租户不需要特殊配置,而Solr则需要更多的高级设置。
4. Elasticsearch 采用 Gateway 的概念,使得完备份更加简单。各节点组成对等的网络结构,某些节点出现故障时会自动分配其他节点代替其进行工作。
缺点:相当于solr强大的插件功能,Elasticsearch扩展性和定制性稍差。
对于同一份数据,已经离线建好索引的情况下,solr和检索速度要比Elasticsearch快不少。
在存在索引实时写入的情况下,solr的检索速度明显下降,
随着实时数据写入量越来越大,solr读去索引的速度会越来越差。
三 Lucene,solr及Elasticsearch的应用场景
基于以上分析,总结一下,Solr,Elasticsearch及lucene各自的应用场景。
solr不适合于提供实时检索的应用场景,基于solr搜索引擎的应用,需要离线把索引做好。
相当于solr而言,Elasticsearch可以作为对查询效率要求不是十分苛刻的实时引擎使用,但是如果作为工业级的实时引擎,Elasticsearch本身也不满足需求,倒是可以作为内存的数据实时查询,日志检索等实时数据应用。
真的要想做一套工业级的实时检索引擎,就需要基于lucene自己开发了,从效率的角度,推荐clucene 或者lucene++,纯效率角度,要比基于lucene java版本的检索效率要高很多。 毕竟基于c&c++的lucene库,不需要jvm运行时的支持。
轻松一刻

- 所有评论