休眠lucene搜索集合和枚举
我想在我的应用程序中使用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查询来做到这一点。
在此先感谢
您使用的@IndexedEmbedded
并不适用于这种情况下 - 在我看来,你的子类是一个实体,如子实体往常一样,他们是指他们的父母,所以父类为他们的孩子有一个双向映射。
如前所述here(Address
作为使用情况实例)
为了确保当它的地址 变化将Lucene的文档进行更新,则需要双向 关系的另一侧@标记ContainedIn。
@ContainedIn仅对与嵌入(集合)对象相反的实体指向 有用。
也许你可以在child
列表上试试@ContainedIn
注释。
总结:
- 可以使用@IndexedEmbedded从
Child
到Parent
(上parent属性) - 可以使用@ContainedIn从
Parent
到Collection<Child>
(双向)
感谢您的回复,我了解到目前为止,但luceneQurery应该如何用于上面的szenario,因为您可以看到我已经尝试了@IndexEmbedded – user2439522
为澄清: – user2439522
只是为了澄清 对于地图例如 \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