2016-01-14 72 views
0

我的ES索引中有两个字段:min_durationmax_duration。我想创建一个查询,找到所有输入duration文件这样的:Elasticsearch Java API中的范围查询

min_duration<=duration<=max_duration

例如,如果duration为30秒,然后我应该得到比EQ min_durationduration和小于duration所有文档等于max_duration

我正在使用ES Java API,似乎是范围过滤器是要走的路。我已经构建了范围过滤器如下:

val filter = FilterBuilders.andFilter(FilterBuilders.rangeFilter("min_duration").lte(duration),FilterBuilders.rangeFilter("max_duration").gte(duration)) 

虽然它似乎还没有为我工作。这是建立这种类型的查询的正确方法,还是我错过了什么?

谢谢。

回答

1

试着用bool query来做。包裹你的两个范围条款就像

QueryBuilder qb = boolQuery() 
    .must(rangeQuery("max_duration").gte(duration)) 
    .must(rangeQuery("min_duration").lte(duration)); 

这是否对您有帮助?