【问题标题】:lucene & hibernate & joining tableslucene & hibernate & 连接表
【发布时间】:2016-09-12 15:10:02
【问题描述】:

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

用户

身份证
名称
... group_id

组

身份证
名称
输入

因此也可以输入组的类型/名称,并且将找到属于该组的用户。
我找到了以下页面,但 (http://blog.mikemccandless.com/2012/01/searching-relational-content-with.html) 它不使用 Hibernate,我在某处读到无法在 Lucene 中使用 Hibernate 加入实体。

您能否告诉我如何在 Lucene 中使用 Hibernate Search 实现这一目标?

------------------- 更新 --------------- ----------------
我忘了提到我们不使用注释,而是使用 .hbm.xml 文件。我们还使用 IndexedMapping 类来添加要索引的实体的属性。例如
indexedMapping.property(field.getName(), ElementType.FIELD);

【问题讨论】:

    标签: hibernate lucene hibernate-search


    【解决方案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.”。例如“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

    【讨论】:

    • 感谢您的回答!我忘了提到我们不使用注释,而是使用 .hbm.xml 文件。我们还使用 IndexedMapping 类来添加要索引的实体的属性。例如。 indexedMapping.property(field.getName(), ElementType.FIELD);你能告诉我如何实现这一目标吗?谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-25
    • 2010-12-09
    • 2019-03-25
    • 1970-01-01
    相关资源
    最近更新 更多