【发布时间】:2017-01-24 02:13:27
【问题描述】:
是否有处理可选子查询的最佳做法?所以说我的搜索服务有
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,生成的查询为“+term1 +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;
}
但是如果有多个子查询,这会很快变得非常混乱。
【问题讨论】:
标签: java search lucene full-text-search hibernate-search