当前位置: 首页 > 面试题库 >

Solr vs. ElasticSearch [关闭]

苏雅珺
2023-03-14
问题内容

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

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


问题答案:

更新资料

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

Apache
Solr
和ElasticSearch之间有很多比较,因此,我将引用我自己最有用的那些,即涵盖最重要的方面:

  • 鲍勃·约普拉特(Bob Yoplait)已经将kimchy的答案与ElasticSearch,Sphinx,Lucene,Solr和Xapian相关联。哪种适合哪种用法?,总结了他 继续并创建ElasticSearch_的原因,他认为,与Solr相比, _ElasticSearch 提供了更好的分布式模型和易用性

  • Ryan Sonnek的实时搜索:Solr vs Elasticsearch提供了有见地的分析/比较,并解释了尽管他已经是Solr的用户,但为何从Solr切换到ElasticSeach的原因-他总结如下:

*在构建 *标准搜索应用程序时Solr 可能是选择的武器,但是 Elasticsearch 通过
用于创建现代实时搜索应用程序体系结构 将其提升到一个新的水平 。渗滤是一种令人兴奋的创新功能,可以单手将Solr吹出水面。
Elasticsearch具有可扩展性,快速性和与之集成的梦想 。Adios Solr,很高兴认识您。 [强调我的]

  • Wikipedia上有关ElasticSearch的文章引用了著名的德国iX杂志的比较,列出了优点和缺点,这些优点和缺点几乎可以总结出上面已经说过的内容:

优点

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

缺点

* ~~只有一个主要开发人员~~ _[根据当前的ElasticsearchGitHub组织](https://github.com/elastic),该应用程序不再适用,除了首先具有相当活跃的提交者基础之外]_
* ~~没有自动预热功能~~ _[根据新的[

索引预热API](https://github.com/elastic/elasticsearch/issues/1913)不再适用]_

初步答案

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

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

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

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

[强调我的]

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

  • ElasticSearch - 它是一个开源(Apache 2的),分布式的,宁静,搜索引擎建立在Apache Lucene之上。

  • Amazon CloudSearch - Amazon CloudSearch是云中的一项完全托管的搜索服务,使客户可以轻松地将快速且高度可扩展的搜索功能集成到其应用程序中。

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

虽然 Solr的 是旧的,相当具有通用性和成熟,因此被广泛使用, ElasticSearch 已经专门开发地址 Solr的
缺点与现代云环境的可扩展性的要求,这是硬(ER),以解决与 Solr的

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



 类似资料:
  • 当试图建立我的项目,我得到以下错误: 在我的build.gradle存储库中,我没有jCenter,所以我得到的这个错误来自仍然指向jCenter的依赖项。 Gradle离线模式不是我期望的解决方案。 我知道jCenter已经崩溃了,我们都应该搬到mavenCentral(我已经做到了) 有解决办法吗?

  • 嗨,我只知道这是一个古老的问题,但今天只是好奇。正如我们所知connection.close也会关闭preared语句(如果我错了请纠正我)。但是如果我关闭连接然后关闭preared语句会怎样 我会得到一个空指针异常吗? 有人说这取决于jvm的速度。有时,ps.close()会在conn.close完成其工作之前运行并首先关闭,因此您不会得到null指针。 为了测试它,我修改了代码 但是我没有得到

  • 问题内容: 我已经实现了 使用资源的自定义 java.util.Iterator ,该资源应在使用方法的最后释放。该资源可以是 java.sql.ResultSet , java.io.InputStream 等。 使用此迭代器的某些外部库可能不知道必须关闭它。例如: 在这种情况下,有没有办法关闭此迭代器? 更新: 非常感谢您提供当前的答案。我给每个人一个(+1)。当 hasNext() 返回fa

  • 问题内容: 今天,我第一次在本地计算机上启动Redis,然后在关闭Rails应用程序后关闭了所有终端窗口。一个小时后,我再次启动Rails应用程序,并执行以下操作来启动Redis服务器 但是,它告诉我 因此,即使关闭了Mac上的终端窗口,我也认为它仍在运行其较早的实例。 看着这个页面http://redis.io/commands/shutdown,我试图运行 在终端窗口中,但我收到此响应 因此,

  • 我对ExecutorService的javadoc#shutdown方法感到困惑。这些说法不矛盾吗? 启动有序关闭,其中执行以前提交的任务,但不接受新任务。此方法不会等待以前提交的任务完成执行。使用waitTersion执行此操作。 如果它能有序地关闭之前提交的任务,那么它怎么能等它们完成执行呢?

  • 我已经实现了HikariCP,它工作得很好,我现在计划优雅地关闭我的应用程序,我想让HikariCP正确地关闭数据库连接,而不仅仅是关闭java应用程序。我在谷歌上阅读,我可以看到HikariDataSource应该有一个封闭的方法。。。。但事实上,我看不到它的可用性: 在Eclipse中,如果我尝试ds。close()。。。Eclipse没有显示“close”作为HikariDataSource

  • 问题内容: 我试图将我的应用程序中较大且经常使用的部分重构为单独的方法,以使其易于维护。 其中一些方法要求用户输入并进行输入验证,因此我使用了Scanner和System.in,但是当我关闭Scanner时,我也关闭了System.in。 所以我的问题是,我只能通过用CloseShieldInputStream屏蔽System.in来防止System.in关闭,还是应该开始将Scanner传递给方

  • 想改进这个问题吗?更新问题,使其仅通过编辑这篇文章来关注一个问题。 刚开始学习java大约一个月,我对arraylist和oop有几个问题 这个arraylist允许我将字符串添加到列表中并存储它,但是如果我有一个类调用簿呢 这三者有什么区别?假设我有大量的输入,比如文件 我有一个班级运动 我该怎么做呢?所以我用许多参数来添加这些输入,因为如果我想添加,我通常会这样做 我也会去