2

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.

4
  • What do you mean by it's not possible? We do it in a somewhat similar way and it works just fine. Do you have any error or could you describe how the result differs from what you expect it to be? Commented Oct 27, 2015 at 12:52
  • I say that It's not possible because when I try to do boolQuery.must(...) boolQuery have not a method call must() . I think as you about I'm doing something wrong but I don't know what. Thanks for your reply. Commented Oct 27, 2015 at 13:01
  • I see. That's probably because your boolQuery is of type QueryBuilder. You probably need to use BoolQueryBuilder as in BoolQueryBuilder query = QueryBuilders.boolQuery(); Commented Oct 27, 2015 at 13:28
  • You're right! Post it as answer to accept. Thanks :) Commented Oct 27, 2015 at 14:05

1 Answer 1

2

That's probably because your boolQuery is of type QueryBuilder. You probably need to use BoolQueryBuilder as in BoolQueryBuilder query = QueryBuilders.boolQuery();

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.