Hibernate Search查询?

时间:2009-12-25 08:08:13

标签: java hibernate lucene search-engine hibernate-search

问候

我的域名模型如下

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

我很想知道,因为所有三个班级都有相同的字段“名称”,它会再搜索所有类吗?

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

2 个答案:

答案 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在线文档和嵌入式索引功能。

- 哈迪