Solr vs. ElasticSearch

search solr lucene elasticsearch

239388 观看

12回复

14462 作者的声誉

这些技术之间的核心架构差异是什么?

另外,哪些用例通常更适合每种用例?

作者: Ben ODay 的来源 发布者: 2012 年 4 月 18 日

回应 (12)


533

55904 作者的声誉

决定

更新

既然问题范围已得到纠正,我也可以在这方面添加一些内容:

Apache SolrElasticSearch之间有很多比较,所以我会参考我自己认为最有用的那些,即涵盖最重要的方面:

  • Bob Yoplait已经将kimchy的答案与ElasticSearch,Sphinx,Lucene,Solr,Xapian联系起来。哪种适合哪种用途?,总结了他继续创建ElasticSearch的原因,他认为ElasticSearch与Solr相比提供了更优越的分布式模型和易用性

  • Ryan Sonnek的实时搜索:Solr vs Elasticsearch提供了深刻的分析/比较,并解释了为什么他从Solr切换到ElasticSeach,尽管他已经是一个快乐的Solr用户 - 他总结如下:

    在构建标准搜索应用程序时Solr可能是首选武器,但Elasticsearch通过用于创建现代实时搜索应用程序架构将其提升到新的水平 。渗透是一个令人兴奋和创新的特点,单独将Solr从水中吹走。Elasticsearch具有可扩展性,快速性和集成的梦想。Adios Solr,知道你很高兴。[强调我的]

  • 关于ElasticSearch的维基百科文章引用了着名的德国iX杂志的比较,列出了优点和缺点,几乎总结了上面已经说过的内容:

    优点

    • ElasticSearch是分布式的。不需要单独的项目。副本也接近实时,称为“推送复制”。
    • ElasticSearch完全支持Apache Lucene的近实时搜索。
    • 处理多租户不是一种特殊的配置,使用Solr需要更高级的设置。
    • ElasticSearch引入了Gateway的概念,使完整备份更容易。

    缺点

    • 只有一个主要开发人员 [根据目前的弹性搜索GitHub组织不再适用,除了首先拥有一个相当活跃的提交者基础]
    • 没有自动装配功能 [根据新的Index Warmup API不再适用]

初步答复

它们是针对完全不同的用例的完全不同的技术,因此无法以任何有意义的方式进行比较:

  • Apache Solr - Apache Solr在易于使用,快速搜索服务器中提供Lucene的功能,具有分面,可扩展性等更多功能

  • Amazon ElastiCache - Amazon ElastiCache是​​一种Web服务,可以轻松部署,操作和扩展云中的内存缓存

    • 请注意,Amazon ElastiCache与Memcached(一种广泛采用的内存对象缓存系统)协议兼容,因此您现在使用现有Memcached环境的代码,应用程序和流行工具将与该服务无缝协作(有关详细信息,请参阅Memcached)。

[强调我的]

也许这已经与以下两种相关技术混淆了:

  • ElasticSearch - 它是一个基于Apache Lucene构建的开源(Apache 2),分布式,RESTful,搜索引擎。

  • Amazon CloudSearch - Amazon CloudSearch是云中的一个完全托管的搜索服务,允许客户轻松地将快速和高度可扩展的搜索功能集成到他们的应用程序中。

Solr的ElasticSearch产品听起来一见钟情惊人地相似,都使用同样的后端搜索引擎,即Apache的Lucene的

虽然Solr较老,功能多样且成熟且相应地广泛使用,但ElasticSearch专门用于解决Solr在现代云环境中具有可扩展性要求的缺点,而Solr很难解决这一问题。

因此,将ElasticSearch与最近推出的Amazon CloudSearch进行比较可能是最有用的(请参阅介绍性文章在一小时内以低于100美元/月的价格开始搜索),因为两者都声称原则上涵盖了相同的用例。

作者: Steffen Opel 发布者: 18.04.2012 04:15

196

2046 作者的声誉

我看到上面的一些答案现在有些过时了。从我的角度来看,我每天都与Solr(云和非云)和ElasticSearch合作,这里有一些有趣的差异:

  • 社区:Solr拥有更大,更成熟的用户,开发者和贡献者社区。ES拥有一个规模较小但活跃的用户社区和不断增长的贡献者社区
  • 成熟度:Solr更成熟,但ES增长迅速,我认为它稳定
  • 表现:很难判断。我/我们还没有做过直接的性能基准测试。LinkedIn上的一个人确实比较了Solr vs. ES与Sensei的比较,但最初的结果应该被忽略,因为他们使用Solr和ES的非专家设置。
  • 设计:人们喜欢Solr。Java API有点冗长,但人们喜欢它是如何组合在一起的。遗憾的是,Solr代码并不总是很漂亮。此外,ES还具有内置分片,实时复制,文档和路由功能。虽然其中一些也存在于Solr中,但感觉有点像经过深思熟虑。
  • 支持:有些公司为Solr和ElasticSearch提供技术和咨询支持。我认为唯一为两者提供支持的公司是Sematext(披露:我是Sematext的创始人)
  • 可伸缩性:两者都可以扩展到非常大的集群。ES比Solr 4.0前版本的Solr更容易扩展,但是Solr 4.0已经不再适用了。

有关Solr与ElasticSearch主题的更全面介绍,请查看https://sematext.com/blog/solr-vs-elasticsearch-part-1-overview/。这是Sematext系列帖子中第一篇发表直接和中立的Solr与ElasticSearch比较的帖子。披露:我在Sematext工作。

作者: Otis Gospodnetic 发布者: 26.08.2012 03:02

6

85 作者的声誉

虽然上述所有链接都具有优点,并且过去使我受益匪浅,但作为语言学家在过去的15年中“暴露”到各种Lucene搜索引擎,我不得不说Python中的弹性搜索开发速度非常快。话虽这么说,有些代码对我来说不直观。因此,我从开源的角度联系了ELK堆栈的一个组件Kibana,发现我可以在Kibana中轻松生成一些有点神秘的弹性搜​​索代码。此外,我也可以将Chrome Sense es查询拉入Kibana。如果您使用Kibana评估es,它将进一步加快您的评估速度。在其他平台上运行花费数小时的时间是在弹性搜索(RESTful接口)之上的Sense中以最差的几分钟(最大数据集)在JSON中运行; 在几秒钟内充其量。elasticsearch的文档虽然超过700页,却没有回答我通常会在SOLR或其他Lucene文档中解决的问题,这显然需要更多的时间来分析。此外,您可能需要查看弹性搜索中的聚合,这会使Faceting达到一个新的水平。

更大的图片:如果您正在进行数据科学,文本分析或计算语言学,那么elasticsearch有一些排名算法似乎在信息检索领域创新。如果你正在使用任何TF / IDF算法,文本频率/逆文档频率,elasticsearch将这个1960年代的算法扩展到一个新的水平,甚至使用BM25,最佳匹配25和其他相关性排名算法。因此,如果您对单词,短语或句子进行评分或排名,那么elasticsearch可以即时进行评分,而不需要花费数小时的其他数据分析方法的大量开销 - 另一个弹性搜索时间节省。使用es,将聚合中的一些优势与实时JSON数据相关性评分和排名相结合,您可以找到一个成功的组合,

注意:确实看到了关于上面聚合的类似讨论,但没有看到聚合和相关性评分 - 我对任何重叠的道歉。披露:我不会为弹性工作,并且由于不同的建筑路径而无法在不久的将来从他们出色的工作中受益,除非我做一些与弹性搜索的慈善工作,这不是一个坏主意

作者: MethodyM 发布者: 03.02.2016 12:04

2

46 作者的声誉

我使用Elasticsearch 3年和Solr大约一个月,我觉得与Solr安装相比,elasticsearch集群很容易安装。Elasticsearch有一个帮助文档池,有很好的解释。其中一个用例我坚持使用直方图聚合,这在ES中可用,但在Solr中找不到。

作者: Prakash Ghanshani 发布者: 26.02.2016 06:45

2

238 作者的声誉

如果您已经在使用SOLR,请坚持使用它。如果您正在启动,请转到弹性搜索。

最大的主要问题已在SOLR中得到修复,并且相当成熟。

作者: Behzad Qureshi 发布者: 25.08.2016 11:54

11

116 作者的声誉

我一直在研究.Net应用程序的solr和弹性搜索。我遇到的主要区别是

弹性搜索:

  • 更多的代码和更少的配置,但有更改api,但仍然是代码更改
  • 对于复杂类型,在类型中键入,即嵌套类型(无法在solr中实现)

Solr:

  • 代码更少,配置更多,因此维护更少
  • 用于在查询期间对结果进行分组(很多工作要么在弹性搜索中完成,而不是直接的方式)
作者: robert 发布者: 07.09.2016 02:35

1

442 作者的声誉

我只使用弹性搜索。因为我发现solr很难开始。弹性搜索的功能:

  1. 易于启动,设置很少。即使是新手也可以逐步设置群集。
  2. 使用NoSQL查询的简单Restful API。还有许多语言库,方便访问。
  3. 好文件,你可以看书:。官方网站上有一个网络版。
作者: Howardyan 发布者: 27.09.2016 01:03

14

451 作者的声誉

自从Apache Solr历史悠久以来,我认为Solr的一个优势就是它的生态系统。有许多Solr插件可用于不同类型的数据和用途。

solr堆栈

从下到上搜索以下层中的平台:

  • 数据
    • 目的:代表各种数据类型和来源
  • 文件编制
    • 目的:构建索引的文档信息
  • 索引和搜索
    • 目的:构建和查询文档索引
  • 逻辑增强
    • 目的:用于处理搜索查询和结果的附加逻辑
  • 搜索平台服务
    • 目的:添加搜索引擎核心的其他功能以提供服务平台。
  • UI应用程序
    • 目的:最终用户搜索界面或应用程序

参考文章:企业搜索

作者: mingxue 发布者: 11.11.2016 04:23

21

6381 作者的声誉

我看到很多人已经在功能和功能方面回答了这个ElasticSearch vs Solr问题,但我没有在这里(或其他地方)看到他们在性能方面的比较。

这就是为什么我决定进行自己的调查。我采用了已编码的异构数据源微服务,该服务已经使用Solr进行术语搜索。我为ElasticSearch切换了Solr,然后我在AWS上使用已编码的负载测试应用程序运行了两个版本,并捕获了后续分析的性能指标。

这是我发现的。在索引文档时,ElasticSearch的吞吐量提高了13%,但Solr的速度提高了十倍。在查询文档时,Solr的吞吐量是ElasticSearch的五倍,速度快了五倍。

作者: Glenn 发布者: 26.02.2017 07:15

8

140 作者的声誉

我创建了一个弹性搜索与Solr和splunk之间的主要差异表,您可以将其用作2016更新: 在此输入图像描述

作者: Fardin Behboudi 发布者: 03.05.2017 09:51

1

135 作者的声誉

在solr中添加嵌套文档非常复杂,嵌套数据搜索也非常复杂。但弹性搜索很容易添加嵌套文档和搜索

作者: Chirag 发布者: 12.07.2017 08:43

4

190 作者的声誉

想象一下用例:

  1. 大量(100+)小(10Mb-100Mb,1000-100000文档)搜索索引。
  2. 他们正在使用很多应用程序(微服务)
  3. 每个应用程序都可以使用多个索引
  4. 小尺寸指数,是的。但是巨大的负载(每秒数百个搜索请求)和请求很复杂(多个聚合,条件等)
  5. 不允许停机
  6. 所有这些都是长达数年,并且不断发展。

想法在每个索引上都有单独的ES实例 - 在这种情况下是巨大的开销。

根据我的经验,使用Elasticsearch支持这种用例非常复杂。

为什么?

第一。

主要问题是基本的背面兼容性无视。

突破性变化真是太酷了!(注意:想象一下SQL-server,它要求你在所有的SQL语句中做一些小改动,升级后......无法想象它。但是对ES来说这是正常的)

在下一个主要版本中掉落的贬值是如此性感!(注意:您知道,Java包含一些已弃用的版本,已有20多年的历史,但仍在实际的Java版本中工作......)

不仅如此,有时你甚至还有一些无法记录的东西(个人只遇到过一次,但......)

所以。如果你想升级ES(因为你需要一些应用程序的新功能,或者你想要修复bug) - 你在地狱。特别是如果它是关于主要版本升级。

客户端API不会兼容。索引设置不会回溯兼容。并且通过ES升级同时升级所有应用/服务是不现实的。

但你必须时不时地做。没有其它的方法。

现有索引会自动升级吗? - 是的 但是,当您需要更改一些旧索引设置时,它无济于事。

为了实现这一目标,您需要不断投入大量资源......将应用程序/服务与ES的未来版本向前兼容。或者你需要在app / services和ES之间构建(并且不断支持)某种中间件,它们为你提供了兼容的客户端API。(并且,您不能使用Transport Client(因为它需要为每个次要版本的ES升级升级jar),而这一事实并不能让您的生活更轻松)

它看起来简单又便宜吗?不,这不对。离得很远。基于ES的复杂基础设施的持续维护在所有可能的意义上都是昂贵的。

第二。简单的API?嗯......不是真的。当你真正使用复杂的条件和聚合时....具有5个嵌套级别的JSON请求是什么,但不简单。


不幸的是,我没有SOLR的经验,对此也无能为力。

但Sphinxsearch在这种情况下要好得多,因为完全兼容SphinxQL。

注意:Sphinxsearch / Manticore确实很有趣。它不是以Lucine为基础的,因此结果严重不同。包含ES所没有的盒子中的几个独特功能,以及小/中等大小索引的快速疯狂。

作者: Gmugra 发布者: 27.11.2017 07:33
32x32