确保将实体添加到休眠搜索索引

时间:2018-07-17 16:10:53

标签: java hibernate-search

我们目前的流程可以总结如下:

  1. 从批量加载过程中插入实体A的列表。
  2. 在指定日期过去后更新这些实体的状态。

我们使用休眠搜索为实体A的某些属性建立索引。但是,我们也有一个要求,即在状态更新后才对实体进行索引。

当前,我们在建立索引时使用 EntityIndexingInterceptor 检查是否根据实体的状态排除该实体。

问题在于我们不对状态字段本身进行索引-因此,当状态字段发生更改时,冬眠的将其添加到索引中的透明机制将不会应用,也永远不会添加。

有没有一种更好的方法可以强制休眠将其添加到索引中而不将字段本身添加到索引中?我们目前每晚重建索引,通常可以,但是仍然留下一个窗口,直到下一次重建时,才可能搜索到实体。

1 个答案:

答案 0 :(得分:0)

您正在使用哪个版本的Hibernate Search?使用拦截器时应自动禁用脏检查优化:

  

使用拦截器时,禁用脏污检查优化。脏检查优化会检查实体中发生了什么更改,并且仅在索引属性发生更改时才触发索引更新。原因很简单,您的拦截器可能依赖于非索引属性,该优化将忽略该属性。

(来自the documentation

如果不是,请向复制者报告问题,或者至少提及您使用的Hibernate Search / Hibernate ORM的确切版本:JIRAtest case templates

在我们解决此问题之前(如果它实际上是一个错误),您始终可以明确禁用脏检查优化:

hibernate.search.enable_dirty_check false