在 Hibernate Lucene 中搜索之前如何重新加载索引

问题描述 投票:0回答:1

比方说,我有 一个 Lucene 索引,正在由 两个应用程序 使用。 为了简单起见,我将它们称为 “ReadApp”“WriteApp”。 只有 WriteApp 可以将更改写入 Lucene-Index。

我的问题是,当两个应用程序都运行时,ReadApp 仅在重新启动后才能看到 WriteApp 对索引所做的更改。

有没有办法配置 ReadApp 在每次读取之前重新加载索引?

我们不要考虑这种努力的表现:)

我正在使用 Lucene 后端 (https://hibernate.org/search/releases/7.0/)

ReadApp的配置:

spring:
  jpa:
    properties:
      hibernate:
        search:
          indexing:
            plan.synchronization.strategy: sync
            listeners.enabled: true
          backend:
            directory.locking.strategy: none
java spring-boot hibernate lucene hibernate-search
1个回答
0
投票

首先,这很危险,因为 Hibernate Search 没有只读模式。任何意外写入都可能损坏您的索引。 您应该考虑与 Hibernate 团队合作添加此类只读模式。 我想最近有人问过这个问题,但我无法参与对话……无论如何,你并不是唯一一个想要这样的功能的人。

如果您非常确定您的第二个应用程序不会写入索引...

有没有办法配置 ReadApp 在每次读取之前重新加载索引?

您所追求的是刷新。每次搜索之前刷新实际上是 Hibernate Search 默认执行的操作...只不过它假设它是唯一写入索引的,如果它没有写入索引,它只是跳过刷新。

(现在 Hibernate Search 中的只读模式会派上用场:Hibernate Search 可以推断出如果它没有写入,其他人正在写入,因此应该禁用此优化)

解决该限制的一种方法是使用“调试”IO 策略

hibernate.search.backend.io.strategy=debug

我不会谈论性能,因为你不想,但是......我们应该谈论性能:)不要在你的写入节点上使用该策略,否则你会后悔的。

© www.soinside.com 2019 - 2024. All rights reserved.