lucene&冬眠&加入表

时间:2016-09-12 15:10:02

标签: hibernate lucene hibernate-search

我们将Lucene与HibernateSearch一起使用,目前我们只查询一个实体的属性。我们想要的是能够查询相关实体的属性 例如:

USER

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

1 个答案:

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

请参阅https://docs.jboss.org/hibernate/stable/search/reference/en-US/html_single/?v=5.5#_programmatically_defining_embedded_entities