在弹性搜索中按日期范围计数和分组

Wae*_*ada 4 elasticsearch

有没有办法获得行数,并按小时,天或月分组.

例如,假设我有消息

_source{
"timestamp":"2013-10-01T12:30:25.421Z",
"amount":200
}
_source{
"timestamp":"2013-10-01T12:35:25.421Z",
"amount":300
}
_source{
"timestamp":"2013-10-02T13:53:25.421Z",
"amount":100
}
_source{
"timestamp":"2013-10-03T15:53:25.421Z",
"amount":400
}
Run Code Online (Sandbox Code Playgroud)

是否有办法单独使用{date,sum}的行(不一定是这种格式,只是想知道我是否有任何办法可以实现这一点)

{
{"2013-10-01T12:00:00.000Z", 500},
{"2013-10-02T13:00:00.000Z", 100},
{"2013-10-03T15:00:00.000Z", 400}
}
Run Code Online (Sandbox Code Playgroud)

谢谢

Sap*_*lio 5

尝试使用聚合.

{     
  "aggs": {
    "amount_per_month": {
      "date_histogram": {
        "field": "timestamp",
        "interval": "week"
      },
      "aggs": {
        "total_amount": {
          "sum": {
            "field": "amount"
          }
        }
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

此外,如果您想计算索引数量,请将以下内容替换为:

"sum": {
  "script": "1"
}
Run Code Online (Sandbox Code Playgroud)

希望能帮助到你.

  • 如果您只想要索引的数量,则可以省略整个第二个聚合.您还可以将`"min_doc_count":0`添加到`date_histogram`中,以便在没有可用数据时显示每个间隔留下间隙. (2认同)