是否有處理可選子查詢的最佳做法?所以說,我的搜索服務有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的,如果我用一個這樣的查詢和術語爲空,生成的查詢是「+字詞1 +空」或類似的規定,這將導致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;
}
但這變得非常凌亂的真快,如果有超過子查詢了一把。