我们将Lucene与HibernateSearch一起使用,目前我们只查询一个实体的属性。我们想要的是能够查询相关实体的属性 例如:
ID
命名
...
group_id
ID
命名
型
因此,也可以键入组的类型/名称,并找到属于该组的用户 我找到了以下页面,但(http://blog.mikemccandless.com/2012/01/searching-relational-content-with.html)它没有使用Hibernate,我在某处读到了在Lucene中无法与Hibernate连接的实体。
请问您能告诉我如何使用Hibernate Search在Lucene中实现这一目标?
-------------------------------更新--------------- ----------------
我忘了提到我们不使用注释但是.hbm.xml文件。我们还使用IndexedMapping类添加要编制索引的实体的属性。例如
indexedMapping.property(field.getName(),ElementType.FIELD);
答案 0 :(得分:1)
如果我理解正确,您正在寻找一种方法来将组实体的属性与用户实体的属性一起索引。
也许@IndexedEmbedded
正是您所寻找的:https://docs.jboss.org/hibernate/stable/search/reference/en-US/html_single/?v=5.5#search-mapping-associated
您必须为group
字段添加注释:
@Entity
@Indexed
public class User {
@Id
@GeneratedValue
private Long id;
@Field
private String name;
@ManyToOne
@IndexedEmbedded
private Group group;
....
}
然后,组的所有索引字段都将添加到用户文档中,前缀为“group”。例如,“group.name”将匹配用户组的名称。
编辑:如果使用程序化API,则必须改为调用.indexedEmbedded()
:
indexedMapping.property(field.getName(), ElementType.FIELD)
.indexedEmbedded();