<div id="content_views" class="htmledit_views">
<h4><a name="t0"></a>1. 需求</h4>
对于es保存的数据,需要根据其时间格式或时间戳格式的字段进行分组统计,计算每天或每小时的某字段统计值
2. 使用方式
c
{
"query": {
"bool": {
"must": [
{
"term": {
"status": "0"
}
}
],
"must_not": [],
"should": []
}
},
"from": 0,
"size": 0,
"sort": [],
"aggs": {
"dateAgg": {
"date_histogram": {
"field": "timestamp",
"offset": "-8h",
"format": "yyyy-MM-dd",
"calendar_interval": "1d",
"order": [
{
"timeSum": "desc"
}
]
},
"aggs": {
"timeSum": {
"sum": {
"field": "statusDurationSecond"
}
}
}
}
}
}
3. 注意点
-
offset: -8h:是因为es默认是按照UTC的时间进行查询的,所以需要减掉8小时
-
calendar_interval:可选内容有
java* 毫秒:1ms 10ms * 秒: second/1s 10s * 分钟: minute/1m 10m * 小时: hout/1h 2h * 天: day/ 1d * 星期: week/1w * 月: month/1M * 季度: quarter/1q * 年: year/1y
-
"format": "yyyy-MM-dd":只有date类型可以format,这里分组字段如果是long类型时间戳,format的结果是下图格式,无意义