前言

全文搜索属于最常见的需求,开源的 Elasticsearch 是目前全文搜索引擎的首选。

基于Lucene它可以快速地储存、搜索和分析海量数据。维基百科、Stack Overflow、Github 都在采用它。

另一个选择是Solr,同样基于Lucene,Solr比ElasticSearch早几年面世,所以相对于Elasticsearch 更成熟和稳定。

ElasticSearch简介

Elasticsearch 是一个开源的搜索引擎,建立在一个全文搜索引擎库 Apache Lucene™ 基础之上。

它使全文检索变得简单, 通过隐藏 Lucene 的复杂性,取而代之的提供一套简单一致的 RESTful API。

Elasticsearch 不仅仅只是一个全文搜索引擎。 还具有如下功能:

  • 一个分布式的实时文档存储,每个字段 可以被索引与搜索
  • 一个分布式实时分析搜索引擎
  • 能胜任上百个服务节点的扩展,并支持 PB 级别的结构化或者非结构化数据

可以把ElasticSearch看成是一个搜索引擎数据库,有数据库知识即可快速入门

ElasticSearch应用场景

1、维基百科

2、Stack Overflow(国外的技术问答论坛)

3、GitHub(开源代码管理),搜索上千亿行代码

4、电商网站,检索商品

5、日志数据分析,logstash采集日志,ES进行复杂的数据分析(ELK技术,elasticsearch+logstash+kibana)

主要用于近实时的全文搜索和数据分析

Solr简介

Apache Solr基于业界大名鼎鼎的java开源搜索引擎Lucene,Lucene更多的是一个软件包,还不能称之为搜索引擎,而solr则完成对lucene的封装,是一个真正意义上的搜索引擎框架。在过去的十年里,solr发展壮大,拥有广泛的用户群体。solr提供分布式索引、分片、副本集、负载均衡和自动故障转移和恢复功能。如果正确部署,良好管理,solr就能够成为一个高可靠、可扩展和高容错的搜索引擎。不少互联网巨头在使用,如Netflix,eBay,Instagram和Amazon(CloudSearch)。

ElasticSearch vs Solr

热度对比

两者在google中的搜索热度,在2013年后,Elasticsearch与Solr相比具有很大的吸引力,但Solr仍然很流行,Solr具有强大的开源社区支持。

安装与配置

相对来说,Elasticsearch更易于安装和配置,学习成本更低。Solr的安装和配置比ElasticSearch要复杂一些。

索引和搜索

数据源

Solr接受来自不同来源的数据,包括XML文件,逗号分隔符(CSV)文件和从数据库中的表提取的数据以及常见的文件格式(如Microsoft Word和PDF)。

Elasticsearch 还支持其他来源的数据,例如ActiveMQ,AWS SQS,DynamoDB(Amazon NoSQL),FileSystem,Git,JDBC,JMS,Kafka,LDAP,MongoDB,neo4j,RabbitMQ,Redis,Solr和Twitter。还有各种插件可用。

搜索

Solr专注于文本搜索,而Elasticsearch则常用于查询、过滤和分组分析统计,Elasticsearch背后的团队也努力让这些查询更为高效。

因此当比较两者时,对那些不仅需要文本搜索,同时还需要复杂的时间序列搜索和聚合的应用程序而言,毫无疑问Elasticsearch是最佳选择。

索引

两者都支持使用停用词和同义词来匹配文档。

在Solr中,索引间进行join必须是单个分片和其他节点上的副本集进行关联来搜索文档间关系(例如SQL连接)。而Elasticsearch提供更高效的has_children和top_children查询来检索这样的相关文档。

可扩展性和分布式

Elasticsearch非常易于扩展,拥有足够多的需要大集群的使用案例。

Solr 基于Apache ZooKeeper也实现了类似ES的分布式部署模式。ZooKeeper是成熟和广泛使用的独立应用程序。

相对比,Elasticsearch有一个内置的类似ZooKeeper的名为Zen的组件,通过内部的协调机制来维护集群状态。

可以说Elasticsearch天生就是分布式的,是转为云而设计,是分布式首选。

社区

Solr有一个广泛的开源社区。任何人都可以贡献给Solr,新的Solr开发人员或代码提交者只能根据功能选择。

Elasticsearch在技术上是开源的,所有贡献者都可以访问源代码,用户可以进行更改并提供。但最终的变化由Elastic(运行Elasticsearch和其他软件的公司)的员工确认和完成。因此,Elasticsearch更多地由单个公司驱动,而不是整个社区。

Solr贡献者和提交者跨越多个组织,而Elasticsearch提交者仅来自Elastic。还有人指出,Solr的强大社区有一个健康的项目管道和许多知名公司参与。这些成员还通过在整个开发和工程过程中做出贡献来投资该平台。

两者都有很好的用户群和丰富的开发人员社区,但ElasticSearch相较于Solr更新。 Solr已经存在了更长的时间,所以它的生态系统是发达的,拥有更大的用户群。

选Solr 还是 Elasticsearch?

  • Elasticsearch由于其易用性而在较新的开发人员中更受欢迎
  • 但是如果你已经在使用solr了,请继续使用它,因为迁移到Elasticsearch并不会带来具体的优势
  • 如果您需要它来处理分析查询以及搜索文本,Elasticsearch是更好的选择,特别是收集日志,做分析处理

-------------------------------

另外一篇文章的关于Elasticsearch和Solr的性能比较

结论

基于以下几个原因,建议使用ElasticSearch

1、易于安装和配置,学习和使用成本较低(ElasticSearch入门简单,只要有数据库和编程知识,solr略复杂);

2、支持单机也支持分布式,内置了分布式组件,降低了学习和使用成本(Solr通过Apache ZooKeeper实现分布式,需要额外的学习成本);

3、除了搜索之外,ElasticSearch还支持实时的过滤、分析、统计功能,可以为我们后续的功能扩展提供支持;

4、在创建索引的同时进行搜索,ElasticSearch比Solr更优,而我们的场景需要实时的创建索引(Solr创建索引的时候会堵塞IO);

5、随着数据量增加ElasticSearch无明显的性能损失(Solr会明显变慢);

参考资料

Solr vs. Elasticsearch谁是开源搜索引擎王者

https://www.cnblogs.com/xiaoqi/p/6545314.html

ElasticSearch和solr的差别

https://www.cnblogs.com/blueskyli/p/8326229.html

Elasticsearch vs Solr 搜索引擎对比和选型的更多相关文章

  1. 搜索引擎选择: Elasticsearch与Solr

    我用过这两种搜索引擎,但也仅仅是用过而已,没有非常深入研究,以下是我的看法 lucene是完全用java实现,而sphinx是支持java api.显然这两者是有差别的,用java实现的意义在于,你可 ...

  2. Elasticsearch与Solr 选型

    转自:http://blog.csdn.net/jameshadoop/article/details/44905643 搜索引擎选择: Elasticsearch与Solr 搜索引擎选型调研文档 E ...

  3. ElasticSearch 与 Solr 的对比测试

    ElasticSearch 与 Solr 的对比测试 本文从两个方面对ElasticSearch和Solr进行对比,从关系型数据库中的导入速度和模糊查询的速度. 单机对比 1. Solr 发布了4.0 ...

  4. Solr vs. Elasticsearch谁是开源搜索引擎王者

    当前是云计算和数据快速增长的时代,今天的应用程序正以PB级和ZB级的速度生产数据,但人们依然在不停的追求更高更快的性能需求.随着数据的堆积,如何快速有效的搜索这些数据,成为对后端服务的挑战.本文,我们 ...

  5. 搜索引擎选择: Elasticsearch与Solr(转)

    搜索引擎选型调研文档 Elasticsearch简介* Elasticsearch是一个实时的分布式搜索和分析引擎.它可以帮助你用前所未有的速度去处理大规模数据. 它可以用于全文搜索,结构化搜索以及分 ...

  6. 搜索引擎:Elasticsearch与Solr

    搜索引擎选型调研文档 Elasticsearch简介* Elasticsearch是一个实时的分布式搜索和分析引擎.它可以帮助你用前所未有的速度去处理大规模数据. 它可以用于全文搜索,结构化搜索以及分 ...

  7. 转 Solr vs. Elasticsearch谁是开源搜索引擎王者

    转 https://www.cnblogs.com/xiaoqi/p/6545314.html Solr vs. Elasticsearch谁是开源搜索引擎王者 当前是云计算和数据快速增长的时代,今天 ...

  8. 搜索引擎选择: Elasticsearch与Solr(转载)

    原文地址:http://www.cnblogs.com/chowmin/articles/4629220.html 搜索引擎选型调研文档 Elasticsearch简介* Elasticsearch是 ...

  9. 【转】搜索引擎选择: Elasticsearch与Solr

    原文地址:http://i.zhcy.tk/blog/elasticsearchyu-solr/ Elasticsearch简介 Elasticsearch是一个实时的分布式搜索和分析引擎.它可以帮助 ...

随机推荐

  1. 修改excel图表中的“系列一”

    修改excel图表中的"系列一" 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考文献 https://zhidao.baidu.com/question/153915 ...

  2. WebSocket接收音频,并推送到声卡上

    使用信息 import com.fasterxml.jackson.databind.ObjectMapper; import com.google.common.collect.ImmutableM ...

  3. Vue个人笔记

    目录 前言 Vue的插值表达式怎么保留小数位 表格列被挤,位置很小 v-if多个条件 前言 此笔记仅仅记录我在使用过程中遇到的一些问题,不定期更新 Vue的插值表达式怎么保留小数位 插值表达式其实都是 ...

  4. pipline中执行shell脚本推送镜像并且部署

    实验架构: 192.168.0.96 gitlab 192.168.0.97 jenkins 192.168.0.98 harbor.docker集群 说明:下面代码编译镜像那一步的代码必须靠左,目的 ...

  5. 【Leetcode_easy】1160. Find Words That Can Be Formed by Characters

    problem 1160. Find Words That Can Be Formed by Characters solution class Solution { public: int coun ...

  6. Android模拟器Genymotion安装使用教程详解

    一.注册\登录 打开Genymotion官网,https://www.genymotion.com/ ,首先点击右上角的Sign in进行登录操作.如何登录就不细讲了,下面讲一下如何注册(备注:注册按 ...

  7. gcc 不同版本的安装

      系统环境centos 6.5 使用root用户进行安装,此方法会将gcc安装至/usr/bin目录下 curl -Lks http://www.hop5.in/yum/el6/hop5.repo ...

  8. MacOs 10.14.3 Matlab2018b 解决“找不到已安装的编译器 'Xcode Clang++'。错误使用mex,未找到合适的编译器”问题

    这是目前网上state of the art 的解决方案: 最开始用的是matlab2017,结果爆了这么一个问题“找不到已安装的编译器 'Xcode Clang++'.错误使用mex,未找到合适的编 ...

  9. LeetCode 142. 环形链表 II(Linked List Cycle II)

    142. 环形链表 II 142. Linked List Cycle II 题目描述 给定一个链表,返回链表开始入环的第一个节点.如果链表无环,则返回 null. 为了表示给定链表中的环,我们使用整 ...

  10. RocketMq 集群方式搭建 步骤教学包教包会

    mq集群方式搭建 有段时间没写这些技术文章了, 今天抽空写一点,不然自己都快忘记了 这篇文章记录了rocketmq 集群方式搭建的过程, 也是自己半天的成果记录吧! 感兴趣的朋友点个赞在走呗! 好了, ...