【发布时间】:2021-05-17 04:10:41
【问题描述】:
我正在通过 Internet 积极搜索我知道可以完成的事情的解决方案,但我很沮丧为什么它不适用于 Hibernate Search。我正在寻找的是类似于 SQL 子句where not in (1,2,3)
我有两个实体,A 和 B。
@Indexed
public class A
{
@Field
public String field1;
@FieldBridge(impl = LongBridge.class)
public Long field2;
@IndexEmbedded
public Set<B> names;
}
public class B {
@Field
public String field3;
@ContainedIn
public Set<A> names2;
}
我正在使用如下所示的 querybuilder 积极运行搜索:
queryBuilder.keyword()
.fuzzy()
.onFields("field1", "names.field3", "field2")
.matching(matching+"-field2:(1 2 3)")
.createQuery();
但matching 并不认为这是完整的 Lucene 匹配模式。它返回将field2 设置为1 2 3 的值,而不是过滤掉这些文档。
编辑1:
我发现布尔查询生成器很有帮助,我创建了调用not() 的查询,期望它过滤数据。底层的 lucene 查询是我所期望的,和我在第一种方法中写的一样,但是 lucene 仍然返回错误的值。另一方面,使用此表达式进行 lucene 索引查询的 Luke 工具返回了我所期望的结果。
编辑2:
我做错的是我使用了单个查询和连接值,而 field2 的每个值都应该由另一个布尔连接携带。现在效果很好!
我做错了什么?我应该使用其他机制吗? Hibernate Search 是否也支持它?
【问题讨论】:
标签: java hibernate lucene hibernate-search