lucene索引和搜索不是父子的工作

时间:2017-07-31 10:03:59

标签: spring lucene hibernate-search

A类是根实体,B类是子实体,关系为1:n。

我的示例代码:

@Entity
@Index
Class A {

 @javax.persistence.Id
 @DocumentId
 @Column
 private Long id;

 @IndexedEmbedded
 private List<B> elements;
}

@Entity
@Index
Class B {

 @javax.persistence.Id
 @DocumentId
 @Column
 private Long id;

 @Column
 private Long name;

 @IndexedEmbedded
 private A a;
}

我的lucene查询:

QueryBuilder builder = searchFactory.buildQueryBuilder().forEntity(B.class).get();
PhraseContext phraseCtx = builder.phrase().withSlop(2).boostedTo(25f);
PhraseMatchingContext phraseMatchingCtx = phraseCtx.onField("name");
Query query =  builder.all().createQuery();

FullTextQuery fullTextQuery = fullTextEntityManager.createFullTextQuery(query,B.class);
List<B> list = fullTextQuery.getResultList();

但它没有检索到结果。

1 个答案:

答案 0 :(得分:0)

您应该在关系B的一侧用@IndexedEmbedded注释替换@ContainedIn

假设A是B的父级,那么在B中你应该添加注释中包含的内容:

@ContainedIn 
private A a;

不要忘记OneToMany / ManyToOne映射