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

时间:2015-11-01 08:49:01

标签: elasticsearch filter range

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

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

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

1 个答案:

答案 0 :(得分:8)

Elasticsearch始终认为某个字段可以包含值列表,因此range filter应该有效。如果任何值与范围匹配,则将对其进行过滤。

您可以将该过滤器用作filtered query

的一部分
{
  "query": {
    "filtered": {
      "filter": {
        "range": {
          "prices": {
            "gte": 10000,
            "lte": 20002
          }
        }
      }
    }
  }
}

但是,过滤查询在2.0中已弃用,因此,如果您使用的是2.0,则最好使用带有过滤器的bool query

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

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