Elasticsearch Java API 中的范围查询

Aru*_*yam 1 java scala elasticsearch

我的 ES 索引中有两个字段:min_durationmax_duration. 我想创建一个查询来查找所有输入文档,duration以便:

min_duration<=duration<=max_duration

例如,如果duration是 30 秒,那么我应该得到所有min_duration小于 eq todurationduration小于 eq to 的文档max_duration

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

val filter = FilterBuilders.andFilter( FilterBuilders.rangeFilter("min_duration").lte(duration),FilterBuilders.rangeFilter("max_duration").gte(duration))
Run Code Online (Sandbox Code Playgroud)

虽然它似乎仍然不适合我。这是构建此类查询的正确方法还是我遗漏了什么?

谢谢。

Chi*_*h25 5

尝试使用bool query来做。将您的两个范围子句包裹在其中,例如

QueryBuilder qb = boolQuery()
    .must(rangeQuery("max_duration").gte(duration))
    .must(rangeQuery("min_duration").lte(duration));
Run Code Online (Sandbox Code Playgroud)

这有帮助吗?