Java SpringJPA+Hibernate搜索:如何仅更新搜索索引(Lucene)?

Java SpringJPA+Hibernate搜索:如何仅更新搜索索引(Lucene)?,java,spring,jpa,spring-data,hibernate-search,Java,Spring,Jpa,Spring Data,Hibernate Search,我使用SpringJPA+HibernateSearch在我的应用程序中实现persistant和Search 我有这样的模型 public class FeatureMeta { @GeneratedValue(strategy=GenerationType.AUTO) private Long id; @Column(unique=true) private String uri; @Column @Field private S

我使用SpringJPA+HibernateSearch在我的应用程序中实现persistant和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不是元数据的一部分,但是我必须将这个字段放在模型中,因为我需要在FeatureSearch的搜索结果中显示totalDownloads

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


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

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

@Field
@Transient
private Long totalDownloads;
使字段暂时也意味着它不会被Hibernate ORM完全忽略,而不会被Hibernate搜索完全忽略;如果这不是您想要的,您可以添加一个额外的字段:将一个字段映射到Hibernate ORM,另一个使用Hibernate搜索进行索引并用@Transient注释。在这种情况下,您必须让setter更新这两个字段

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

hibernate.search.enable_dirty_check = false

因为Hibernate Search将不会在Lucene索引中生成任何更改,以防实体没有其他更改。

不希望保留此下载次数的原因是什么?它存放在别的地方吗?如果是这样,您的元数据和存储这些信息的其他位置之间是否存在某种关系链接?如果你不在任何地方保存它,当你的索引被破坏并且可能发生的时候,你将无法在totalDownloads字段中用正确的数据重建它们。。。