Hibernate搜索如何处理从超类继承的注释?
我无法使用这些实体创建正确的索引结构: 人Hibernate搜索如何处理从超类继承的注释?,hibernate,lucene,hibernate-search,Hibernate,Lucene,Hibernate Search,我无法使用这些实体创建正确的索引结构: 人 @Entity public class Person implements Serializable { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @OneToMany(mappedBy = "person") @ContainedIn private Set<PersonRole> roles
@Entity
public class Person implements Serializable {
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@OneToMany(mappedBy = "person")
@ContainedIn
private Set<PersonRole> roles = new LinkedHashSet<>();
@Field
private String firstname;
// other properties, getter + setter
}
人才
@Entity
@Indexed
public class Talent extends PersonRole implements Serializable {
@Field
private String email;
}
在此模型中,人员
可能有一个或多个人员角色
s。历史上,该指数一直是另一种方式,即从人才开始,包括人。但是,当我部署并保存一些人才
实例时,查看索引,人才索引中没有person.firstname
(或任何person属性)
我也尝试了另一种方法,切换@ContainedIn
和@IndexedEmbedded
,从而将人才
包含在个人
的索引中,但这也不起作用-我的个人索引中没有人才。电子邮件
我更喜欢历史结构,但如果有人能指出一种方法,使另一个方向更容易工作,那也是受欢迎的
Sanne说,类似的问题可能只能通过自定义的FieldBridge来解决,但Hibernate的JIRA对我来说已经过时了,我不知道如何在这里索引人才的属性(这里有比这里显示的更多的方法,包括几个@IndexedEmbedded
)。因此,如果有人能给我一个链接来解释这一点,我也很乐意接受。即使OP的原始问题已经解决,问题的答案如下:Hibernate搜索将把继承的、带注释的属性作为该类的属性/字段,并相应地对它们进行索引(即使是@IndexedEmbedded
超类的属性也将被编入索引,无需额外的配置/努力)。您如何保存/搜索人才?我试用了您的代码,用人保存了一个人才,并且能够通过Luke看到人。firstName
保存在索引中(在使用“重建和编辑”按钮后,因为该字段没有保存),我可以通过搜索名字来找到人才
。保存的是人才上的一个简单的JPA entityManager.persist(),搜索是通过FullTextSession完成的,它通过一个标准QueryParser解析的lucene查询字符串来传递(没有花哨的分析仪或任何东西)。但是我事先和Luke检查了索引,它不包含人物子树。唉,我想是时候构建一个最小的示例了。谢谢验证!这太令人尴尬了:在重新导入人才、构建索引并重新启动应用程序后,搜索工作正常。我还可以使用“重建和编辑条目”验证确实出现在索引中。你完全应该得到这个提示的代表:)很高兴我能提供一些帮助!重构和编辑在调试我过去的索引相关问题时为我节省了大量时间,所以我很高兴我能说出这个词。
@Entity
@Indexed
public class Talent extends PersonRole implements Serializable {
@Field
private String email;
}