3

我想在特定时间段内获取 date_histogram,如何限制日期时间段?我应该使用 extended_bounds 参数吗?例如:我要查询'2016-08-01'和'2016-08-31'之间的date_histogram,间隔为天。我用这个表达式查询:

{
  "aggs": {
    "cf_loan": {
      "date_histogram": {
        "field": "createDate",
        "interval": "day",
        "format": "yyyy-MM-dd",
        "min_doc_count": 0,
        "extended_bounds": {
          "min": "2016-08-01",
          "max": "2016-08-31"
        }
      }
    }
  }
}

但我得到的 date_histogram 不在范围内。

4

1 回答 1

10

您快到了,您需要添加一个range查询,以便仅选择createDate字段在所需范围内的文档。

{
  "query": {
    "range": {                           <---- add this range query
      "createDate": {
        "gte": "2016-08-01T00:00:00.000Z",
        "lt": "2016-09-01T00:00:00.000Z"
      }
    }
  },
  "aggs": {
    "cf_loan": {
      "date_histogram": {
        "field": "createDate",
        "interval": "day",
        "format": "yyyy-MM-dd",
        "min_doc_count": 0,
        "extended_bounds": {
          "min": "2016-08-01",
          "max": "2016-08-31"
        }
      }
    }
  }
}

extended_bounds参数的作用是确保即使其中没​​有文档,您也会从minto获取每日存储桶。max例如,假设您在 2016-08-04 和 2016-08-28 之间每天有 1 个文档,那么如果没有该extended_bounds参数,您将获得 25 个存储桶(2016-08-04、2016-08-05、2016-08 -06,...,2016 年 8 月 28 日)。

使用该extended_bounds参数,您还将获得以下存储桶,但包含 0 个文档:

  • 2016-08-01
  • 2016-08-02
  • 2016-08-03
  • 2016-08-29
  • 2016-08-30
  • 2016-08-31
于 2016-09-05T03:54:55.527 回答