无法使用 Hibernate Search 搜索 child 实体

Unable to search on child entity using Hibernate Search

我在 name 字段上的以下 Master 实体上使用 Hibernate。它工作顺利。但是,我也想搜索它的 child 实体 SubMaster's subName 字段。

我添加了 @IndexedEmbedded@ContainedIn 注释,如 Hibernate Search 文档中所述。但是,它返回空 当我尝试在 subName.

上搜索时
@Entity
@Indexed
@Table(name = "master", catalog="mydb")
public class Master implements java.io.Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "seq", unique = true, nullable = false)
    private Integer seq;

    @Column(name = "name", length = 45)
    @Field(index=Index.YES, analyze=Analyze.YES, store=Store.NO)
    private String name;

    @OneToMany(fetch = FetchType.EAGER, mappedBy = "master")
    @IndexedEmbedded
    private Set<SubMaster> subMasters = new HashSet<SubMaster>(0);

    //Getters and Setters
}


@Entity
@Table(name = "sub_master", catalog="mydb")
public class SubMaster implements java.io.Serializable {

    @Id
    @Column(name = "seq", unique = true, nullable = false)
    private Integer seq;

    @Column(name = "sub_name", length = 45)
    @Field(index=Index.YES, analyze=Analyze.YES, store=Store.NO)
    private String subName;

    @ManyToOne(fetch = FetchType.EAGER)
    @ContainedIn
    private Master master = new HashSet<Master>(0);

    //Getters and Setters
}

搜索码:

FullTextEntityManager fullTextEntityManager = org.hibernate.search.jpa.Search.getFullTextEntityManager(em);

QueryBuilder qb = fullTextEntityManager.getSearchFactory()
        .buildQueryBuilder().forEntity(Master.class).get();

org.apache.lucene.search.Query query = qb
      .keyword()
        .wildcard()
      .onFields("name", "subMasters.subName")
      .matching("*"+token.toLowerCase()+"*")
      .createQuery();

javax.persistence.Query jpaQuery =
        fullTextEntityManager.createFullTextQuery(query, Master.class);

@SuppressWarnings("unchecked")
List<Master> result = jpaQuery.getResultList();

正在建立索引:

姓名 _hibernate_class

任何正确方向的帮助将不胜感激。提前致谢。

不确定是否打字错误但是:

.onFields("name", "subMaster.subName")

应该是:

.onFields("name", "subMasters.subName")

在 "subMasters" 末尾有一个 s。

当你遇到这种情况的时候,和Luke(https://github.com/DmitryKey/luke/releases)一起看看你的索引,会有很大的帮助。

感谢所有试图帮助我的人。但是,我自己想出了问题。我使用 hibernate tools 从我的数据库生成实体,生成的实体在 @Table 注释中有一个属性 catalog

我删除了这个 catalog 属性并重新索引了我的实体并在 subMasters.subName 上执行了搜索并且它非常有效。