弹性搜索date_histogram extended_bounds

时间:2016-09-05 01:39:45

标签: elasticsearch date-histogram

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

{
  "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不在范围内。

1 个答案:

答案 0 :(得分:3)

您几乎就在那里,您需要添加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参数的作用是确保即使其中没​​有文档,您也可以获得从minmax的每日存储分区。例如,假设您在2016-08-04和2016-08-28之间每天有1个文档,那么没有extended_bounds参数,您将得到25个桶(2016-08-04,2016-08- 05,2016-08-06,...,2016-08-28)。

使用extended_bounds参数,您还可以获得以下存储桶但有0个文档:

  • 2016年8月1日
  • 2016年8月2日
  • 2016年8月3日
  • 2016年8月29日
  • 二零一六年八月三十零日
  • 2016年8月31日