Elasticsearch查询以查找范围重叠

时间:2016-10-31 19:53:48

标签: elasticsearch

假设我有以下索引文档:

{
    "field1": [400, 800]
}

我想使用2个搜索参数(min_val = 300max_val = 500)创建查询,以选择这两个范围重叠的文档。

在我的示例中,应该选择上面的文档,我们可以看到:

300                    500
 [======================]
                   [=====================]
                  400                   800

找到重叠两个数字范围的文档的最有效方法是什么? 我可以使用多个比较,以及许多 ands ors ,但我正在寻找一种更简单有效的方法来实现这一目标。

1 个答案:

答案 0 :(得分:3)

在ES中,field1之类的数字范围实际上并不是一个范围,只是两个不同的值,即400和800.您所要做的就是使用简单的range query并将field1与范围的下限和上限进行比较,即

  • 范围[300,500]应包括400或800

使用DSL表示,您最终会得到像这样的单一范围查询:

{
  "query": {
    "range": {
      "field1": {
        "gte": 300,
        "lte": 500
      }
    }
  }
}