我有一些查询我的代码非常相似。我想通过使用条件语句来缩短和清理构建通用boolQuery
的代码。这些是我的方法:
private SearchRequestBuilder createSearchRequestInRangeForGroupId( String groupId,Date rangeStart,Date rangeEnd) {
...
.setQuery(filteredQuery(
boolQuery()
.must(matchQuery(FIELD_GROUP_NAME, groupId)),
rangeFilter(FIELD_TIMESTAMP).gte(rangeStart.getTime()).lte(rangeEnd.getTime())))
...
}
private SearchRequestBuilder createSearchRequestInRangeForGender( String gender,Date rangeStart,Date rangeEnd) {
...
.setQuery(filteredQuery(
boolQuery()
.must(matchQuery(FIELD_GENDER, gender)),
rangeFilter(FIELD_TIMESTAMP).gte(rangeStart.getTime()).lte(rangeEnd.getTime())))
...
}
private SearchRequestBuilder createSearchRequestInRangeForGroupIdAndGender( String groupId,String gender,Date rangeStart,Date rangeEnd) {
...
.setQuery(filteredQuery(
boolQuery()
.must(matchQuery(FIELD_GROUP_NAME, groupId))
.must(matchQuery(FIELD_GENDER, gender)),
rangeFilter(FIELD_TIMESTAMP).gte(rangeStart.getTime()).lte(rangeEnd.getTime())))
....
return searchRequestBuilder;
}
我想做一个这样的boolQuery
生成器:
private SearchRequestBuilder createSearchRequestInRange( String groupId,String gender,Date rangeStart,Date rangeEnd) {
...
.setQuery(filteredQuery(
buildBoolQuery(groupId,gender),
rangeFilter(FIELD_TIMESTAMP).gte(rangeStart.getTime()).lte(rangeEnd.getTime())))
...
}
private QueryBuilder buildBoolQuery(String groupId, String gender){
QueryBuilder boolQuery = boolQuery();
if(groupId!=null && !groupId.isEmpty())
boolQuery = boolQuery.must(matchQuery(FIELD_GROUP_NAME, groupId))
}
if(gender!=null && !gender.isEmpty())
boolQuery = boolQuery.must(matchQuery(FIELD_GENDER, gender))
}
return boolQuery;
}
我已经试过了,但是不可能。有什么办法可以做到吗?谢谢你。
这可能是因为您的boolQuery类型是QueryBuilder。你可能需要使用BoolQueryBuilder在BoolQueryBuilder query = QueryBuilders.boolQuery();