Java 确保将实体添加到hibernate搜索索引

Java 确保将实体添加到hibernate搜索索引,java,hibernate-search,Java,Hibernate Search,我们目前有一个流程,可以总结如下: 插入批量加载过程中实体A的列表 在指定日期过后更新这些实体的状态 我们使用hibernate搜索来索引实体A的一些属性。但是,我们也有一个要求,在状态更新之前,我们不索引实体 目前,我们在索引时使用EntityIndexingInterceptor检查是否根据实体的状态排除该实体 问题是我们没有为状态字段本身编制索引——因此,当状态字段发生变化时,hibernate将其添加到索引的透明机制没有被应用,并且永远不会被添加 有没有更好的方法可以强制hibernat

我们目前有一个流程,可以总结如下:

  • 插入批量加载过程中实体A的列表
  • 在指定日期过后更新这些实体的状态
  • 我们使用hibernate搜索来索引实体A的一些属性。但是,我们也有一个要求,在状态更新之前,我们不索引实体

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

    问题是我们没有为状态字段本身编制索引——因此,当状态字段发生变化时,hibernate将其添加到索引的透明机制没有被应用,并且永远不会被添加


    有没有更好的方法可以强制hibernate将其添加到索引中,而无需将字段本身添加到索引中?我们目前每晚重建索引,通常可以,但仍会留下一个窗口,在下一次重建之前,实体可能无法搜索。

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

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

    (来自)

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

    在我们修复此问题之前(如果它实际上是一个bug),您始终可以显式禁用脏检查优化:

    hibernate.search.enable_dirty_check false
    

    哦,谢谢你向我指出这一点。我进一步研究了一下,它似乎执行了我们实际上完全绕过hibernate的更新(raw update语句),我没有意识到这一点。。所以,这对hibernate搜索来说根本不是问题。