我正在 Hibernate 搜索 Java 应用程序中工作,该应用程序具有一个具有索引数字字段的实体:
@Field
@NumericField
private Long orgId;
我想获取与此属性的 Long 值列表匹配的实体列表。我使用“simpleQueryString”,因为它允许使用“OR”逻辑与 char | 对于几个客观价值。我有这样的事情:
queryBuilder.simpleQueryString().onField("orgId").matching("1|3|8").createQuery()
运行 mi 应用程序后我得到:
指定的查询“+(orgId:1 orgId:3 orgId:8)”包含基于字符串的子查询,其目标是数字编码字段“orgId”。检查您的查询或尝试限制目标实体。
那么,有人可以告诉我这段代码有什么问题吗?还有其他方法可以满足我的需要吗?
===================================更新1:
yrodiere'的答案解决了这个问题,但我还有另一个疑问,我想验证实体是否与其他字段匹配,我知道我可以使用BooleanJuntion,但是我需要混合“必须”和“应该”用法,对吧?IE:
BooleanJunction<?> bool = queryBuilder.bool();
for (Integer orgId: orgIds) {
bool.should( queryBuilder.keyword().onField("orgId").matching(orgId).createQuery() );
}
bool.must(queryBuilder.keyword().onField("name").matching("anyName").createQuery() );
然后,我验证实体必须与“名称”匹配,并且它们还与给定的 orgId 之一匹配,我说得对吗?
烙印99
相关分类