问候
我的域名模型如下
class Species {
private String name;
..
..
List<Family> families;
}
class Family{
private String name;
private String locusId;
..
List<Member> members;
}
class Members{
private String name;
private String repTranscript;
}
我想使用'Hibernate Search'来执行像
这样的查询org.hibernate.lucene.search.Query luceneQuery = parser.parse( "name:ASpeciesName or name:AGroupName or locudID:someLocusID" );
org.hibernate.Query fullTextQuery = fullTextSession.createFullTextQuery( luceneQuery );
List result = fullTextQuery.list();
我很想知道,因为所有三个班级都有相同的字段“名称”,它会再搜索所有类吗?
'结果'是否包含所有类型的对象?
答案 0 :(得分:2)
逻辑上,是的,因为查询中没有指定您想要的对象类型。
如果要将结果限制为特定类型,则需要将这些类型作为vararg列表传递:
fullTextSession.createFullTextQuery( luceneQuery, A.class, B.class );
这描述为in the docs。
答案 1 :(得分:2)
这还取决于你的索引方式。如果单独索引每个类(意味着每个类都有一个@Indexed注释),并且在创建FullTextQuery时没有指定期望的类类型,那么结果中确实会混合使用类。
但是,在您的示例中,您可能会考虑在属性系列和成员上使用@IndexedEmbedded。在这种情况下,Lucene Document 中的字段名称将为 families.name 和 families.members.name 。
查看Hibernate Search在线文档和嵌入式索引功能。
- 哈迪