我遇到类似this one
的情况@Entity
@Indexed
public class Place {
@Id
@GeneratedValue
@DocumentId
private Long id;
@Field( index = Index.TOKENIZED )
private String name;
@OneToOne( cascade = { CascadeType.PERSIST, CascadeType.REMOVE } )
@IndexedEmbedded
private Address address;
....
}
@Entity
public class Address {
@Id
@GeneratedValue
private Long id;
@Field(index=Index.TOKENIZED)
private String street;
@Field(index=Index.TOKENIZED)
private String city;
@ContainedIn
@OneToMany(mappedBy="address")
private Set<Place> places;
...
}
现在的问题如下: 如果我更改实体 Place 中的 name 字段,哪些实体将被重新编入索引?
1)只有名称字段?
2)整个 Place 实体?
3)整个 Place 实体和用 @IndexedEmbedded 注释的实体?
我需要的是第三个。因此,如果它不是标准的,是否可以有任何解决方案来实现这种行为?
答案 0 :(得分:4)
幸运的是,它确实是第三个,所以我很幸运,它按预期工作
答案 1 :(得分:0)
您可以使用以下代码手动重新索引场所实体
public void updateIndex(T entity){
FullTextEntityManager fullTextEntityManager = Search.getFullTextEntityManager(em);
fullTextEntityManager.index(entity);
fullTextEntityManager.getSearchFactory().optimize(entity.getClass());
}
其次,如果您正在使用hibernate,您可以在persistence.xml
中配置lucene以自动更新已更改实体的索引