Apache solr和elastic search的比较

来源:互联网 发布:学生党淘宝店铺白菜价 编辑:程序博客网 时间:2024/06/05 04:20

Apache solr和elastic search的比较

最近的项目需要对数据库中的数据进行搜索,介于使用Apache solr和elastic search之间纠结。针对我正在开发的java WEB项目而言,对他们两个做了比较如下:

  • 一.关键词

集群——
一个集群就是由一个或多个节点组织在一起,它们共同持有你整个的数据,并一起提供索引和搜索功能。
集群由一个唯一的名字标识,这个名字默认就是“elasticsearch”。这个名字是重要的,因为一个节点只能通过指定某个集群的名字,来加入这个集群。在产品环境中显式地设定这个名字是一个好习惯,但是使用默认值来进行测试/开发也是不错的。
节点——
一个节点是你集群中的一个服务器,作为集群的一部分,它存储你的数据,参与集群的索引和搜索功能。和集群类似,一个节点也是由一个名字来标识的,默认情况下,这个名字是一个随机的漫威漫画角色的名字,这个名字会在启动的时候赋予节点。这个名字对于管理工作来说挺重要的,因为在这个管理过程中,你会去确定网络中的哪些服务器对应于Elasticsearch集群中的哪些节点。
索引——
一个索引就是一个拥有几分相似特征的文档的集合。比如说,你可以有一个客户数据的索引,另一个产品目录的索引,还有一个订单数据的索引。一个索引由一个名字来标识(必须全部是小写字母的),并且当我们要对对应于这个索引中的文档进行索引、搜索、更新和删除的时候,都要使用到这个名字。在一个集群中,如果你想,可以定义任意多的索引。
文档——
一个文档是一个可被索引的基础信息单元。比如,你可以拥有某一个客户的文档,某一个产品的一个文档,当然,也可以拥有某个订单的一个文档。文档以JSON(Javascript Object Notation)格式来表示,而JSON是一个到处存在的互联网数据交互格式。

一个节点可以通过配置集群名称的方式来加入一个指定的集群。默认情况下,每个节点都会被安排加入到一个叫做“elasticsearch”的集群中,这意味着,如果你在你的网络中启动了若干个节点,并假定它们能够相互发现彼此,它们将会自动地形成并加入到一个叫做“elasticsearch”的集群中。

  • 二.异同

相同点:
他们都是基于Lucene的全文搜索服务器;
他们都可以接近实时的进行查询,即从索引一个文档直到这个文档能够被搜索到有一个轻微的延迟(通常是1秒);
不同点:
Apache solr查询更快,并且适用于一台机器;而elastic search的查询速度较solr慢,更适用于集群服务器;
elastic search的优势主要体现在分布式处理上,而我们这个项目目前只有一个服务器。
但是以后可能会发展壮大,所以可以考虑使用es来做查询和搜索(还需要考虑负载均衡)

  • 三.总结

(1)es使用了更先进的技术和对更多种语言的支持,可是单从java语言来说他们没有差别;而es的那些集群技术等对我们以后的再次开发是有需要的。
(2)我了解到一个服务器,它搭建在的网络环境要求很高,一般都是100M的网速,但最多支持的是2万人同时在线操作。我们初期的人数预计可能没那么多,可是到后面人数增多的时候再考虑集群和负载均衡的话就不太好实现了。
(3)es在做单机搜索上是没有solr快的,但是在做分布式处理上,es查询速度则更快。

参考文档 http://blog.csdn.net/qinnimei/article/details/50865211

0 0