数组字段的elasticsearch范围过滤器

elasticsearch range filter for array field

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

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

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

之间

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
          }
        }
      }
    }
  }
}

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