0

问候

我的域模型如下

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;

}

我想使用“休眠搜索”来执行查询,例如

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();

我想知道,由于所有三个类都有相同的字段“名称”,它会再次搜索所有类吗?

“结果”是否包含所有类型的对象?

4

2 回答 2

2

从逻辑上讲,是的,因为您在查询中没有指定您想要的对象类型。

如果要将结果限制为特定类型,则需要将这些类型作为可变参数列表传递:

fullTextSession.createFullTextQuery( luceneQuery, A.class, B.class );

在文档中有所描述。

于 2009-12-25T09:02:25.847 回答
2

这还取决于您如何索引。如果您单独索引每个类(意味着每个类都有一个 @Indexed 注释)并且在创建 FullTextQuery 时没有指定预期的类类型,那么您在结果中确实会得到混合类。

但是,在您的示例中,您可能会考虑在属性familymembers上使用 @IndexedEmbedded 。在这种情况下,Lucene Document中的字段名称将是family.namefamily.members.name

查看 Hibernate Search 在线文档和嵌入式索引功能。

——哈代

于 2009-12-26T16:41:20.950 回答