繁体   English   中英

Hibernate 搜索6、更新实体后刷新索引

[英]Hibernate search 6 , refresh index after updating entity

不幸的是,我没有找到解决问题的方法,我需要帮助。 我有这样的实体

@Table(name = "A")
@Entity
@Indexed
@Getter
@Setter
@NoArgsConstructor
public class EntityA {

    @IndexedEmbedded
    @OneToOne(cascade = CascadeType.ALL)
    private EntityB b;
}


@Table(name = "B")
@Entity
@Indexed
@Getter
@Setter
@NoArgsConstructor
public class EntityB {

    @OneToOne(mappedBy = "b")
    private EntityA a;
    
    @KeywordField(name = "text_sort", sortable = Sortable.YES)
    @FullTextField(projectable = Projectable.YES)
    @Column(nullable = false)
    private String text;

}

我为我的 EntityA 进行了第一次保存

EntityB entityB = new EntityB();
entityB.setText("text");
EntityA entityA = new EntityA();
entityA.setB(entityB);
entityARespository.save(entityA);

然后我想更新entityB中的字段文本,所以我首先从数据库中获取entityA,然后进行更新并保存entityA

EntityA entityA = entityARepository.findById(1L);
entityA.getB().setText("test")
entityBRepository.save(entityA); 

然后当我用字符串“test”进行研究时,没有找到任何结果,但是用字符串“text”是的。 这意味着索引没有刷新,但我没有找到问题所在

两种可能的解释:

  1. 您对价值test的更新是在事务之外完成的。 确保使用事务,或者如果您真的不想要一个事务,请在调用save()之后调用entityManager.flush()entityBRepository.flush()和 Spring 数据,我想?)。

  2. 您没有等待足够长的时间来显示更新。 Elasticsearch 是一个近实时平台。 这意味着您的更新不会立即可见,而是在定期“刷新”之后,默认情况下每秒发生一次。

    有关“刷新”概念的更多信息,请参见此处

    您可以使用sync同步策略配置Hibernate Search在每次索引更新后强制刷新,但是这样Elasticsearch的性能会很差。 我只建议将其用于自动化测试,绝对不是在生产中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM