java Hibernate搜索在布尔查询中处理null
是否有处理可选子查询的最佳实践?所以说我的搜索服务
query = builder.bool().must(createQuery(field1, term1)).must(createQuery(field2, term2)).createQuery();
createQuery(field, term) {
if(term != null) {
return builder.keyword().onField(field).matching(term).createQuery();
}
return null;
}
对于默认QueryBuilder,如果我使用这样的查询,并且术语为null,则生成的查询是“+term1+null”或类似的内容,这会在针对索引执行查询时导致null指针异常。是否有建议的方法来避免此问题?我正在考虑一个定制的QueryBuilder,但我不知道如何告诉全文会话使用我的实现,而不是默认的实现。我唯一能想到的另一种方式是
query;
query1 = createQuery(field1, term1);
query2 = createQuery(field2, term2);
if(query1 != null && query2 != null) {
query = builder.bool().must(query1).must(query2).createQuery();
} else if(query1 != null && query2 == null) {
query = query1;
} else if(query1 == null && query2 != null) {
query = query2;
}
createQuery(field, term) {
if(term != null) {
return builder.keyword().onField(field).matching(term).createQuery();
}
return null;
}
但是,如果子查询的数量超过一小部分,就会很快变得非常混乱
# 1 楼答案
您可能要做的是引入一个方法,其唯一目的是以空安全的方式添加“必须”。也就是说,像这样做:
这将消除BooleanJunction API的“流动性”,但由于它仅处于顶层,我想它还不错
# 2 楼答案
这个呢
如果有不同术语的重复字段,则必须使用: