我在这里打开另一个有关Hibernate Search的话题...
现在我正在处理:
@Field
@ElementCollection
@CollectionTable(name = "product_instance", joinColumns =
@JoinColumn(name = "doc_uuid"))
@Column(name = "productInstance")
@org.hibernate.annotations.Cache(
usage = CacheConcurrencyStrategy.READ_WRITE
)
private List<String> productInstanceIds;
映射。
这是我构造查询的方式:
FullTextEntityManager fullTextEntityManager = Search.getFullTextEntityManager(entityManager);
QueryBuilder b = fullTextEntityManager.getSearchFactory()
.buildQueryBuilder()
.forEntity(DocVersion.class)
.get();
builder.add(b.keyword().onField(disjMap.get(...)).matching(...)
.createQuery(), BooleanClause.Occur.SHOULD);
List results = fullTextEntityManager.createFullTextQuery(builder.build(), DocVersion.class)
.getResultList();
,查询就可以了。
现在我的问题主要是@CollectionTable
。我需要从该“表”中索引和查询元素。我知道问题出在映射中,因为当我在其中保留@Field
批注时,我得到0个结果(不是错误),但是当我删除它时,我得到了关于其他实体道具的许多结果。
因此它不会尖叫错误,但不会返回任何内容。我的意思是,我在两种情况下都使用相同的查询,因此必须与该映射有关。
所以我的问题是如何使Lucene指数@CollectionTable
?
休眠搜索:5.9.3。最终
谢谢!
答案 0 :(得分:0)
为了在Hibernate Search 5.x中索引“原子”元素(字符串,整数,枚举等)的集合,您有两种解决方案:
var html = element.html();
添加到集合中,并你应该很好。@IndexedEmbedded
批注中对其进行引用。请再次注意,您的日志中应该有一个堆栈跟踪,当您离开@Field批注时,它可能已经提示您了;像这样:
@Field