弹性搜索范围过滤器用于阵列字段

Rob*_*bin 3 range filter elasticsearch

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

_source: {
  ...
  prices: [
    20001,
    30001
  ]
}
Run Code Online (Sandbox Code Playgroud)

我想过滤结果,使得价格至少包含一个值列表,例如: [20002,30000] #不会返回上述文档,因为没有值介于20002和30000之间,但[10000,20002]会返回上面的文档,因为价格字段中的20001以上文件的数据介于10000和20002之间

mol*_*are 8

Elasticsearch始终认为字段可以包含值列表,因此范围过滤器应该起作用.如果任何值与范围匹配,则将对其进行过滤.

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

{
  "query": {
    "filtered": {
      "filter": {
        "range": {
          "prices": {
            "gte": 10000,
            "lte": 20002
          }
        }
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

但是,过滤查询在2.0中已弃用,因此,如果您使用的是2.0,则可以更好地将bool查询与过滤器一起使用:

{
  "query": {
    "bool": {
      "must": {
        "match_all": {}   
      },  
      "filter": {
        "range": {
          "prices": {
            "gte": 10000,
            "lte": 20002
          }
        }
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

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