gpt4 book ai didi

java - Spring JPA + Hibernate 搜索 : How update the Search Index(Lucene) only?

转载 作者:行者123 更新时间:2023-12-02 13:31:04 25 4
gpt4 key购买 nike

我使用 Spring JPA + Hibernate Search 在我的应用程序中实现持久化和搜索。

我有这样的模型

public class FeatureMeta {

@GeneratedValue(strategy=GenerationType.AUTO)
private Long id;

@Column(unique=true)
private String uri;

@Column
@Field
private String name;

@Field
@Column
private String businessDesc;

@Field
@Column
private String logicalDesc;

.
.


@Field
@Column(insertable=false,updatable=false)
private Long totalDownloads;

.
.

}

为了给出这个类的概念,“FeatureMeta”维护很少更新的元数据信息。

然而,每当用户下载有关此“功能”的信息时,“totalDownloads”字段就会不断变化。基本上“totalDownloads”不是元数据的一部分,但我必须将此字段放入模型中,因为我需要在“feature search”的搜索结果中显示“totalDownloads”。

我使用相同的 JPA 存储库来更新 MySQL 和 Lucene 索引。

我的问题是;每当“totalDownloads”字段发生更改时,是否可以只更新 Lucene 索引中的“totalDownloads”,而不更新 MySQL 中的实体?

最佳答案

您必须使用 @Transient 注释来标记您不希望此属性成为数据库模型的一部分。

@Field
@Transient
private Long totalDownloads;

使字段为 transient 也意味着它不会从数据库加载(Hibernate ORM 完全忽略,但 Hibernate Search 不会);如果这不是您想要的,您可以添加一个附加字段:将一个字段映射到 Hibernate ORM,另一个使用 Hibernate Search 进行索引并使用 @Transient 进行注释。在这种情况下,您必须让 setter 更新这两个字段。

您可能还需要更改此配置属性:

hibernate.search.enable_dirty_check = false

否则,如果实体没有其他更改,Hibernate Search 不会在 Lucene 索引中生成任何更改。

关于java - Spring JPA + Hibernate 搜索 : How update the Search Index(Lucene) only?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43175135/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com