为什么要在Hibernate Search中使用Elasticsearch或Apache Solr?

13
我了解并理解Elasticsearch、Apache Solr和Hibernate Search都是基于Apache Lucene库的。它们提供快速的全文搜索,所有这些库都使用JPA注释,实现JPA和/或定义自定义注释。它们大多用于与RDBMS / NoSQL数据存储一起使用。索引和可搜索的数据以文档形式存在。
我完全可以接受有人提出Solr vs Hibernate Search - 选择哪个以及何时选择?甚至是'Elasticsearch vs Solr'或'Elasticsearch vs Hibernate Search'的问题。
但是,还有这种Hibernate Search/Elasticsearch connector的方法,可以同时使用Hibernate Search和Elasticsearch,或者这篇文章询问“如何将Hibernate和Solr集成在一起?”并回答如何将Hibernate Search和Solr集成在一起,对我来说是不同的,对吗?
假设上面的总结是正确的,并且由于链接的帖子让我困惑:为什么人们考虑或使用Elasticsearch或Solr以及Hibernate Search?这不是多余的吗?还是Hibernate Search提供了Solr / Elasticsearch的接口,而Hibernate ORM没有,因此仅用作某种适配器?
4个回答

9

我尚未实现elasticsearch,但我正在考虑将其作为Hibernate搜索的后端。

我遇到的一个问题是,如果我在独立模式下运行8个JBoss服务器集群,则默认情况下它们都在本地文件系统上拥有单独的索引。当通过Hibernate进行更改时,它仅更新该单个节点上的索引。保持所有索引最新变得困难。

为解决这个问题,我们一直在研究在集群配置中运行Hibernate搜索的推荐方法,但是正确运行它似乎很困难。通过使用elasticsearch,看起来我们可以将搜索服务器移动到Web应用程序之外,并单独管理它,而无需更改任何旧的Hibernate Search代码。


5
请注意:之前的答案虽然很好,但已经过时了多年。
Hibernate Search现在与Elasticsearch的集成非常出色,因此您可以像其他人建议的那样享受与Hibernate的集成的好处,同时还能获得Elasticsearch的好处。
请参见search.hibernate.org 与Apache Solr的集成也应该是可能的,但尚未实施,团队需要帮助。
希望通过解耦并使Elasticsearch集成成为一种选择来完成艰苦的工作,从而使其变得更加容易。

4

根据我的经验,我从Hibernate Search迁移到Elasticsearch,并没有保留Hibernate Search中的任何内容(包括注释)。

我认为使用Jackson将Bean序列化为JSON很容易,您不需要复杂的操作。一旦您有了JSON文档,只需将其发送到Elasticsearch即可完成。

话虽如此,我仍然保留着传统的SQL搜索,以防需要对Elasticsearch集群进行某些维护操作。但是,如果您将Elasticsearch嵌入到Web应用程序中(假设您没有太多数据需要管理),那么您不需要考虑这个问题。

以上是我的个人建议。


这对我来说听起来很合理。我只是想知道为什么会有这些适配器存在,除了一些“奇特”的情况之外,是否有任何合法的理由将它们组合在一起。我正在完成我的论文,其中部分内容涉及将关系型数据库、NoSQL和搜索服务器结合使用 - 这就是我对此感到好奇的原因。 - Steven
我认为主要是因为人们害怕删除现有代码,只想修改实现而不修改代码。此外,“NoSQL”与“关系型”思考方式不同。也许他们还没有准备好改变自己的思维模式?以上仅代表我的个人看法。 - dadoonet

3
为了充分利用Hibernate Search的关系型数据库与索引同步功能,这意味着您的搜索索引始终与关系数据库/源同步。同时,您可能仍希望获得Solr或Elastic Search提供的一些高级功能(如高亮显示、自动碎片重平衡等)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接