'Range queries in Elasticsearch Java API
I have two fields in my ES index: min_duration and max_duration. I want to create a query to find all the documents for input duration such that :
min_duration<=duration<=max_duration
For example if duration is 30 seconds then I should get all docs having min_duration less than eq to duration and duration less than eq to max_duration.
I am using ES Java API and seems like range filter is the way to go. I have constructed the range filter as follows:
val filter = FilterBuilders.andFilter( FilterBuilders.rangeFilter("min_duration").lte(duration),FilterBuilders.rangeFilter("max_duration").gte(duration))
Though it still not seems to work for me. Is it the correct way to build this type of query or am I missing something?
Thanks.
Solution 1:[1]
Try doing it with bool query. Wrap your two range clauses inside it like
QueryBuilder qb = boolQuery()
    .must(rangeQuery("max_duration").gte(duration))
    .must(rangeQuery("min_duration").lte(duration));
Does this help?
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source | 
|---|---|
| Solution 1 | ChintanShah25 | 

 elasticsearch
elasticsearch