【问题标题】:Persisting entities to both database and search engine将实体持久化到数据库和搜索引擎
【发布时间】:2013-04-18 17:30:49
【问题描述】:

我正在创建一个使用 JPA 和 ElasticSearch 的应用程序。我有一个关于如何将它们构建和连接在一起的问题。我有一个名为 Newspaper 的实体。

我想将它保存在数据库中,并在搜索引擎中对其进行索引。现在,有什么好的方法呢?您是否会将搜索存储库层注入使用 JPA 的新闻纸存储库,然后在持久化后对其进行索引?

您是否会创建一个服务层并拥有一个服务 bean 类,您首先将其保存到数据库中,然后使用存储库对其进行索引?或者这可以通过其他(更好的)方式来完成吗?

【问题讨论】:

    标签: java spring jakarta-ee jpa elasticsearch


    【解决方案1】:

    查看 Hibernate Search 中的代码。它同时同步 w Lucene 和数据库(如果需要,也可以异步)。

    或者只使用 Hibernate Search。

    【讨论】:

    • 但我不想使用 Hibernate 搜索。我使用 Elasticsearch。
    • 是的,我知道。这就是为什么我建议您查看 Hibernate Search 的源代码以了解其工作原理,以便您自己实现它。
    • 它不像在我的场景中那样工作。问题仍未得到解答。
    【解决方案2】:

    这是我在以前的工作中所做的:

    在服务层,使用 Hibernate 持久化实体后,使用 Jackson 转换实体并将其发送到 Elasticsearch。 当然,你可以在 repo 层(DAO 层)这样做,但我不太喜欢它。

    顺便说一句,如果您使用的是 Spring,请查看 Spring factory Project for Elasticsearch

    【讨论】:

    • 好的,谢谢。这就是我最初计划的方式。那么只有一个问题。你有两个服务吗?一个持久化实体,另一个持久化和索引?还是您一直想建立索引,所以您只创建了一项服务?
    • 只有一项服务。但是使用 try/catch,因为如果 Elasticsearch 出现故障,我不想停止我的服务。我只需要记录错误。
    猜你喜欢
    • 1970-01-01
    • 2012-01-30
    • 2016-05-12
    • 1970-01-01
    • 2017-07-23
    • 1970-01-01
    • 2015-11-15
    • 1970-01-01
    • 2012-09-07
    相关资源
    最近更新 更多