Elasticsearch 范围过滤器在日期直方图中不起作用

Elasticsearch range filter not working in date histogram

我在 elasticsearch(版本:1.7.1)中遇到了一个困惑。根据文档 https://www.elastic.co/guide/en/elasticsearch/guide/current/_filtering_queries_and_aggregations.html ,应用于查询的过滤器也将应用于聚合。当我发出以下查询时,我得到了意想不到的结果。

{
  "aggregations": {
    "outer": {
      "aggregations": {
        "inner": {
          "date_histogram": {
            "extended_bounds": {
              "min": 0
            },
            "field": "time",
            "interval": "30d",
            "min_doc_count": 0,
            "order": {
              "_key": "desc"
            }
          }
        }
      },
      "terms": {
        "field": "ad_id",
        "size": 10
      }
    }
  },
  "query": {
    "filtered": {
      "filter": {
        "and": {
          "filters": [
            {
              "range": {
                "time": {
                  "from": 1441619173000,
                  "include_lower": false,
                  "include_upper": true,
                  "to": 1442835370000
                }
              }
            }
          ]
        }
      }
    }
  }
}

部分结果在这里。

{
  "buckets": [
    {
      "key": 203737,
      "doc_count": 27,
      "inner": {
        "buckets": [
          {
            "key_as_string": "2015-09-02T00:00:00.000Z",
            "key": 1441152000000,
            "doc_count": 27
          },
          {
           "key_as_string": "1970-01-31T00:00:00.000Z",
           "key": 2592000000,
           "doc_count": 0
          },

          ...
          {
            "key_as_string": "1970-01-01T00:00:00.000Z",
            "key": 0,
            "doc_count": 0
          }
        ]
      }
    }
  ]
}

请注意,聚合结果包含超出我应用的范围的键。时间字段的类型是date。我也试过下面的查询,但结果是一样的。

{
  "aggs": {
    "outer_filter": {
      "filter": {
        "and": {
          "filters": [
            {
              "range": {
                "time": {
                  "from": 1441619173000,
                  "include_lower": false,
                  "include_upper": true,
                  "to": 1442835370000
                }
              }
            }
          ]
        }
      },
      "aggs": {
        "outer_term": {
          "terms": {
            "field": "ad_id",
            "size": 10
          },
          "aggs": {
            "inner": {
              "date_histogram": {
                "extended_bounds": {
                  "min": 0
                },
                "field": "time",
                "interval": "30d",
                "min_doc_count": 0,
                "order": {
                  "_key": "desc"
                }
              }
            }
          }
        }
      }
    }
  }
}

我的问题是聚合结果包括过滤器之外的结果("from":1441619173000,"to":1442835370000)。

为什么没有应用过滤器? 有谁能帮忙吗

您似乎将范围过滤器与范围聚合混淆了。

范围过滤器采用两种类型的参数,gte 或 gt(大于)和 lte 或 lt(小于)。

from/to 参数用于范围聚合,用于将结果拆分到用户定义的桶中。

'extended_bound' 最小值是问题所在。由于min为0,字段类型为date,buckets从1970开始。