Ben*_*Day 723 lucene search solr elasticsearch
这些技术之间的核心架构差异是什么?
另外,哪些用例通常更适合每种用例?
Ste*_*pel 554
既然问题范围已得到纠正,我也可以在这方面添加一些内容:
Apache Solr和ElasticSearch之间有很多比较,所以我会参考我自己认为最有用的那些,即涵盖最重要的方面:
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服务,可以轻松部署,操作和扩展云中的内存缓存.
[强调我的]
也许这已经与以下两种相关技术混淆了:
ElasticSearch - 它是一个基于Apache Lucene构建的开源(Apache 2),分布式,RESTful,搜索引擎.
Amazon CloudSearch - Amazon CloudSearch是云中的一个完全托管的搜索服务,允许客户轻松地将快速和高度可扩展的搜索功能集成到他们的应用程序中.
该Solr的和ElasticSearch产品听起来一见钟情惊人地相似,都使用同样的后端搜索引擎,即Apache的Lucene的.
虽然Solr较老,功能多样且成熟且相应地广泛使用,但ElasticSearch专门用于解决Solr在现代云环境中具有可扩展性要求的缺点,而Solr很难解决这一问题.
因此,将ElasticSearch与最近推出的Amazon CloudSearch进行比较可能是最有用的(请参阅介绍性文章在一小时内以低于100美元/月的价格开始搜索),因为两者都声称原则上涵盖了相同的用例.
Oti*_*tic 204
我看到上面的一些答案现在有些过时了.从我的角度来看,我每天都与Solr(云和非云)和ElasticSearch合作,这里有一些有趣的差异:
有关Solr与ElasticSearch主题的更全面介绍,请查看http://blog.sematext.com/2012/08/23/solr-vs-elasticsearch-part-1-overview/.这是Sematext系列帖子中第一篇发表直接和中立的Solr与ElasticSearch比较的帖子.披露:我在Sematext工作.
小智 14
我创建了一个弹性搜索与Solr和splunk之间的主要差异表,您可以将其用作2016更新:
小智 13
我一直在研究.Net应用程序的solr和弹性搜索.我遇到的主要区别是
弹性搜索:
Solr:
小智 7
虽然上述所有链接都具有优点,并且过去使我受益匪浅,但作为语言学家在过去的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数据相关性评分和排名相结合,您可以找到一个成功的组合,具体取决于您的敏捷(故事)或架构(用例)方法.
注意:确实看到了关于上面聚合的类似讨论,但没有看到聚合和相关性评分 - 我对任何重叠的道歉.披露:我不会为弹性工作,并且由于不同的建筑路径而无法在不久的将来从他们出色的工作中受益,除非我做一些与弹性搜索的慈善工作,这不是一个坏主意
如果您已经在使用 SOLR,请继续坚持下去。如果您正在起步,请选择弹性搜索。
SOLR 已经修复了最大的主要问题,并且已经相当成熟。
想象一下用例:
每个索引都有单独的ES实例的想法-在这种情况下会产生巨大的开销。
根据我的经验,这种用例对于Elasticsearch的支持非常复杂。
为什么?
第一。
主要问题是根本的后兼容性忽略。
重大更改非常酷!(注意:想象一下SQL服务器,它要求您在所有SQL语句中做一些小的更改,升级后……无法想象。但是对于ES来说,这是正常的)
在下一个主要版本中将弃用的弃用是如此性感!(注意:您知道,Java包含一些已弃用的特性,已有20多年的历史了,但仍然可以在实际的Java版本中使用。)
不仅如此,有时您甚至还可以找到任何地方都没有记载的内容(个人只遇到过一次,但...
所以。如果您想升级ES(因为某些应用程序需要新功能或想要修复错误),那么您将陷入困境。特别是关于主要版本升级时。
客户端API将不会向后兼容。索引设置将不兼容。与ES升级同时升级所有应用程序/服务是不现实的。
但是您必须不时这样做。没有其它的方法。
现有索引是否自动升级?-是的 但是,当您需要更改某些旧索引设置时,它无济于事。
要实现这一目标,您需要不断投入大量精力,以使您的应用程序/服务与ES的未来版本保持向前兼容性。或者,您需要在您的应用程序/服务和ES之间构建(并始终支持)某种中间件,从而为您提供兼容的客户端API。(而且,您不能使用Transport Client(因为每次次要版本的ES升级都需要jar升级),并且这一事实并不能使您的生活更轻松)
它看起来简单又便宜吗?不,这不对。离得很远。持续维护基于ES的复杂基础架构在所有可能的意义上都是昂贵的。
第二。简单的API?好吧...不。当您真正使用复杂的条件和聚合时。...具有5个嵌套级别的JSON请求就可以了,但并不简单。
不幸的是,我没有SOLR的经验,对此无能为力。
但是由于完全兼容SphinxQL,Sphinxsearch在这种情况下要好得多。
注意:Sphinxsearch / Manticore确实很有趣。它不是基于Lucine的,因此存在很大的不同。包含一些ES所没有的独特功能,并通过中小尺寸索引快速抓狂。
归档时间: |
|
查看次数: |
250360 次 |
最近记录: |