@IndexedEmbedded 字段的自动重新索引

时间:2021-03-05 10:59:56

标签: hibernate-search hibernate-search-6

据我了解

的文档的这一部分

https://docs.jboss.org/hibernate/search/6.0/reference/en-US/html_single/#mapper-orm-reindexing-basics

没有双向映射的@IndexedEmbedded 字段没有自动重新索引。我对么?如果是这样,我很想知道是什么导致了引入这个,因为在 Hibernate 搜索中,在更新 @IndexedEmbedded 字段中的字段时会自动重新索引。这是否意味着我现在负责更新索引?

以下是我的用例示例,它导致索引未更新:

@Indexed(index = "foo_index")
@Entity
public class Foo {

   private Long id;

   @IndexedEmbedded
   @ManyToOne(fetch = LAZY)
   private Bar bar;
}

@Entity
public class Bar {
   private Long id;

   @GenericField
   private String barFieldOne;

   @GenericField
   private String barFieldTwo;
}

然后假设我从数据库中检索 Foo 并像这样更改栏字段:

Foo foo = repository.findById(1);
foo.getBar().setBarFieldOne("newValue");
repository.save(foo);

尽管我正在处理 @Indexed 对象(在我们的例子中是 Foo),但这不会触发 foo 索引的索引更新。我有很多单向关系,我不想让它们双向,因为我不需要它们,它们会导致性能问题。我知道如果我自己更新 bar 实体,它不会更新索引,但在这里我通过主 @Indexed 实体更新它,我希望索引会被更新。

这个用例在 hibernate search 5 中完美运行,老实说,这很重要。有没有办法让它在这里工作,因为这会让我的生活更轻松。

1 个答案:

答案 0 :(得分:0)

您很清楚,当修改后的实体和索引实体之间只有单向关联时,Hibernate Search 无法触发重新索引。

有计划解决这个问题,也许有一天,但这仍然需要一些配置:https://hibernate.atlassian.net/browse/HSEARCH-1937

<块引用>

这个用例在 hibernate search 5 中完美运行,老实说这是一个重要的

为此我需要一个复制器。如果你设法让它发挥作用,我会非常非常惊讶。 如果有效,那可能只是其他原因的副作用:您禁用了脏检查,或者您的实体上有一个临时属性,导致它每次都被重新索引。

我们在搜索 6 中所做的只是确保在您尝试对单向关联使用 @IndexedEmbedded 时抛出错误,并强制您明确禁用该关联的自动重新索引。

它在 Hibernate Search 5 中也不起作用,但是 Hibernate Search 5 会默默地忽略这些问题,您最终会认为它起作用了,但它没有。

实际上,唯一的变化是您现在意识到了问题。它以前存在过。

相关问题