1

I'm new to Elastic search. Successfully implemented search document API for matching single field like below:

SearchRequest searchRequest = new SearchRequest(indexName);

//Single field match, only for documentId
QueryBuilder matchQueryBuilder = QueryBuilders.matchQuery("documentId", documentId); 

SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
sourceBuilder.query(matchQueryBuilder);
searchRequest.source(sourceBuilder);

SearchResponse searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);

I wanna filter data using multiple fields in single API, for Example, need to add more filters in above API as per below condition:

documentNumber > 66 &&  (documentCreatedDate >= date1 && documentCreatedDate <= date2) && documentName like "%test%"

Can anyone please help how to apply all these filters in a single SearchRequest?

Devkinandan Chauhan
  • 1,785
  • 1
  • 17
  • 42

1 Answers1

1

You can use rangeQuery as specified in docs:

QueryBuilders.rangeQuery("documentNumber")                                             
    .gte(66); 
QueryBuilders.rangeQuery("documentCreatedDate")                                             
    .gte(date1)
    .lt(date2); 

For patterns you can use wildcardQuery:

wildcardQuery(
        "documentName",                                              
        patternString); 

From Docs:
Find documents where the field specified contains terms which match the pattern specified, where the pattern supports single character wildcards (?) and multi-character wildcards (*)

For applying multiple filters in single query, please refer to this answer.

ProGamer
  • 420
  • 5
  • 16