一尘不染

用于数组字段的elasticsearch范围过滤器

elasticsearch

我有一个包含整数数组的字段,例如:

_source: {
  ...
  prices: [
    20001,
    30001
  ]
}

我想过滤结果,以使价格至少包含介于以下之间的值列表之一: 由于价格字段中的`[20002,30000]

值不在20002至30000之间,因此将不返回上述文档,但[10000,20002]`由于价格在20001之内,将返回以上文档上述文件的10000和20002之间


阅读 307

收藏
2020-06-22

共1个答案

一尘不染

Elasticsearch始终认为字段可以包含值列表,因此,范围过滤器应该起作用。如果任何值与范围匹配,它将被过滤。

您可以将该过滤器用作过滤查询的一部分:

{
  "query": {
    "filtered": {
      "filter": {
        "range": {
          "prices": {
            "gte": 10000,
            "lte": 20002
          }
        }
      }
    }
  }
}

但是,过滤查询在2.0中已弃用,因此,如果您使用的是2.0,则最好将布尔查询与过滤器配合使用:

{
  "query": {
    "bool": {
      "must": {
        "match_all": {}   
      },  
      "filter": {
        "range": {
          "prices": {
            "gte": 10000,
            "lte": 20002
          }
        }
      }
    }
  }
}

请注意,我在示例中使用了过滤器,因为您需要过滤器:)

2020-06-22