2014-07-24 134 views
0

我想在我的应用程序中使用hibernate搜索(lucene)实现搜索功能。简单搜索字符串字段的工作是完美的,但现在事情变得更加复杂.... 我希望你能给我一些提示或样本。休眠lucene搜索集合和枚举

我有以下实体...

@Entity 
@Indexed 
public class ChildClass { 

    @Enumerated 
    @Field(index = Index.YES, analyze = Analyze.YES, store = Store.YES) 
    private EnumType enumType; 
    .... 

    //getter setter 

} 

=============================== =========

@Entity 
@Indexed 
public class ParentClass { 

@IndexEmbeded 
List<ChildClass> childs; 

    //getter setter... 

} 

================================== ======

public enum EnumType { 
    a,b,c 
} 

===================================== ==

现在,我尝试搜索和查找,例如:

“找到具有孩子的ParentClasses的一个List,child.enumtype =一个”

我可以用HQL或原生SQL查询做到这一点。但是如何用hibernate lucene查询来做到这一点。

在此先感谢

+0

为澄清: – user2439522

+0

只是为了澄清 对于地图例如 \t @Field(index = Index.YES,analyze = Analyze.YES,store = Store。NO) @IndexedEmbedded(depth = 1) private Map comments; \t 我可以使用查询像: luceneQuery = queryBuilder.keyword()通配符()onField( “注释”)匹配( searchString的).createQuery();。 booleanJunction.should(luceneQuery); \t \t \t 这qurey返回结果如预期。 我有上述用例的问题 – user2439522

回答

0

您使用的@IndexedEmbedded并不适用于这种情况下 - 在我看来,你的子类是一个实体,如子实体往常一样,他们是指他们的父母,所以父类为他们的孩子有一个双向映射。

如前所述hereAddress作为使用情况实例)

为了确保当它的地址 变化将Lucene的文档进行更新,则需要双向 关系的另一侧@标记ContainedIn。

@ContainedIn仅对与嵌入(集合)对象相反的实体指向 有用。

也许你可以在child列表上试试@ContainedIn注释。

总结:

  • 可以使用@IndexedEmbedded从ChildParent(上parent属性)
  • 可以使用@ContainedIn从ParentCollection<Child>(双向)
+0

感谢您的回复,我了解到目前为止,但luceneQurery应该如何用于上面的szenario,因为您可以看到我已经尝试了@IndexEmbedded – user2439522