这些技术之间的核心架构差异是什么?
另外,哪些用例通常更适合每种用例?
这些技术之间的核心架构差异是什么?
另外,哪些用例通常更适合每种用例?
当前回答
我使用Elasticsearch 3年了,使用Solr大约一个月,我觉得与Solr安装相比,Elasticsearch集群非常容易安装。Elasticsearch有一个帮助文档池,其中有很好的解释。其中一个用例是直方图聚合,它在ES中可用,但在Solr中找不到。
其他回答
我发现上面的一些答案现在有点过时了。从我的角度来看,我每天都在使用Solr(云和非云)和ElasticSearch,这里有一些有趣的区别:
Community: Solr has a bigger, more mature user, dev, and contributor community. ES has a smaller, but active community of users and a growing community of contributors Maturity: Solr is more mature, but ES has grown rapidly and I consider it stable Performance: hard to judge. I/we have not done direct performance benchmarks. A person at LinkedIn did compare Solr vs. ES vs. Sensei once, but the initial results should be ignored because they used non-expert setup for both Solr and ES. Design: People love Solr. The Java API is somewhat verbose, but people like how it's put together. Solr code is unfortunately not always very pretty. Also, ES has sharding, real-time replication, document and routing built-in. While some of this exists in Solr, too, it feels a bit like an after-thought. Support: there are companies providing tech and consulting support for both Solr and ElasticSearch. I think the only company that provides support for both is Sematext (disclosure: I'm Sematext founder) Scalability: both can be scaled to very large clusters. ES is easier to scale than pre-Solr 4.0 version of Solr, but with Solr 4.0 that's no longer the case.
有关Solr vs. ElasticSearch主题的更全面报道,请查看https://sematext.com/blog/solr-vs-elasticsearch-part-1-overview/。这是Sematext系列文章中的第一篇,对Solr和ElasticSearch进行了直接和中立的比较。披露:我在Sematext工作。
我看到这里有很多人回答了ElasticSearch和Solr在特性和功能方面的问题,但我在这里(或其他地方)没有看到太多关于它们在性能方面如何比较的讨论。
这就是我决定自己进行调查的原因。我采用了一个已经编码的异构数据源微服务,该服务已经使用Solr进行术语搜索。我把Solr换成了ElasticSearch,然后在AWS上用一个已经编码的负载测试应用程序运行了两个版本,并捕获了用于后续分析的性能指标。
以下是我的发现。在索引文档时,ElasticSearch的吞吐量要高13%,而Solr的速度要快10倍。在文档查询方面,Solr的吞吐量是ElasticSearch的5倍,速度也是ElasticSearch的5倍。
我只使用弹性搜索。因为我发现solr很难开始。 Elastic-search的特点:
启动方便,设置少。即使是新手也可以一步一步地设置集群。 简单的Restful API,使用NoSQL查询。以及许多易于访问的语言库。 好的文件,你可以读这本书:。官方网站上有网络版。
想象一下用例:
大量(100+)小型(10Mb-100Mb, 1000-100000个文档)搜索索引。 它们被很多应用程序(微服务)使用 每个应用程序可以使用多个索引 小尺寸指数,是的。但是巨大的负载(每秒数百个搜索请求)和复杂的请求(多个聚合、条件等) 不允许停机 所有这些都是持续多年的工作,并不断增长。
每个索引都有单独的ES实例的想法在这种情况下是巨大的开销。
根据我的经验,用Elasticsearch来支持这种用例非常复杂。
Why?
第一。
主要问题是根本的向后兼容性忽略。
突破性的改变太酷了! (注意:想象一下SQL-server需要你在所有sql语句中做小的改变,当升级时…真不敢想象。但对于ES来说是正常的)
将在下一个主要版本中删除的弃用是如此性感! (注意:你知道,Java包含一些过时的东西,已经有20多年的历史了,但在实际的Java版本中仍然可以工作…)
不仅如此,有时你甚至有一些没有记录的东西(个人只遇到过一次,但是……)
所以。如果你想升级ES(因为你需要一些应用程序的新功能或者你想修复错误)-你就在地狱里。尤其是关于重大版本升级的时候。
客户端API将不向后兼容。索引设置将不向后兼容。 在升级ES的同时升级所有应用/服务是不现实的。
但你必须时不时地去做。没有别的办法。
现有索引是否自动升级?——是的。但是当您需要更改一些旧的索引设置时,它没有帮助。
为了适应这一点,你需要不断地在……您的应用程序/服务与ES未来版本的向前兼容性。 或者,您需要在应用程序/服务和ES之间构建某种中间件(无论如何都要不断地支持),从而为您提供兼容的客户机API。 (而且,您不能使用Transport Client(因为每次小版本ES升级都需要升级jar),这并没有使您的生活更轻松)
它看起来简单便宜吗?不,不是。远非如此。 对基于ES的复杂基础设施的持续维护,无论如何都是昂贵的。
第二。 简单的API ?嗯…没有真的。 当你真的在使用复杂的条件和聚合....带有5个嵌套级别的JSON-request是什么,但并不简单。
不幸的是,我对SOLR没有经验,不能说什么。
但是Sphinxsearch在这种情况下要好得多,因为SphinxQL完全向后兼容。
注意: Sphinxsearch/Manticore确实很有趣。它不是基于Lucine的,结果严重不同。包含几个独特的功能,从盒子,ES没有和疯狂的快速与小/中等大小的索引。
我一直致力于。net应用程序的solr和弹性搜索。 我所面临的主要不同是
弹性搜索:
更多的代码和更少的配置,但有api的改变 但仍然是一个代码更改 对于复杂类型,类型中类型即嵌套类型(在solr中无法实现)
Solr:
代码更少,配置更多,因此维护更少 用于在查询期间对结果进行分组(在 弹性搜索,简而言之,没有直接的方法)