I have some queries on my code very similars. I want to shorten and clean my code building a generic boolQuery by using conditional statements. These are my methods:
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;
}
I want to make a boolQuery builder like this:
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;
}
I've tried to do this but It's not possible. Is there any way to do this? Thanks you.
boolQuery.must(...)boolQuery have not a method callmust(). I think as you about I'm doing something wrong but I don't know what. Thanks for your reply.BoolQueryBuilder query = QueryBuilders.boolQuery();