“月日”聚合

时间:2016-06-02 08:02:28

标签: elasticsearch

我一直试图获得“按月计算”的Elasticsearch日期直方图聚合(存储桶必须是1到31)。

例如,假设我的索引由以下内容组成:

LAST_MODIFIED_DATE
-------------------
2015-02-01 11:29
2015-03-01 11:41
2015-07-15 12:45
2015-05-15 12:47

我希望能够通过“Day in Month”聚合它,以便聚合结果集为:

Day in Month   |   Count    
01             |   2
15             |   2

我很想得到:

Day in Month   |   Count    
01             |   1
01             |   1
15             |   1
15             |   1

我假设每天汇总,而不是此功能所需的“日期”。

有人知道如何使用日期直方图方法实现它吗?

由于此处的应用程序需要时区支持所有日期维度,因此这似乎是最好的方法。

1 个答案:

答案 0 :(得分:0)

你有两个解决方案

  1. 您在索引编制时添加另一个字段dayOfMonth,并在该字段上汇总
  2. 你使用一点script来提取月中的日期并在其上汇总(注意:你需要enable dynamic scripting
  3. 第一种解决方案是首选解决方案,因为它会更高效。

    第二个解决方案如下:

    {
      "size": 0,
      "aggs": {
        "day_in_month": {
          "histogram": {
            "script": "doc.LAST_MODIFIED_DATE.date.getDayOfMonth()",
            "interval": 1,
            "order": {
              "_key": "desc"
            }
          }
        }
      }
    }
    

    <强>更新

    date_histogram aggregation

    支持时区
    {
      "size": 0,
      "aggs": {
        "day_in_month": {
          "date_histogram": {
            "field": "LAST_MODIFIED_DATE",
            "interval": "day",
            "time_zone": "+02:00",
            "format": "dd",
            "order": {
              "_key": "desc"
            }
          }
        }
      }
    }