此dsl返回索引日期字段中的所有小时数。但是我需要一个"小时值的总值"在索引中。所以我只希望24个桶因此每个桶包含一个小时,这个桶中的值必须是这个小时内所有文档的字段总数(" respsize")
{
"size":0,
"query":{
"filtered":{
"filter":{
}
}
},
"aggs":{
"aggs1":{
"date_histogram":{
"field":"loggingdate",
"interval":"hour",
"format":"k",
"order":{
"aggs2":"desc"
}
},
"aggs":{
"aggs2":{
"sum":{
"field":"respsize"
}
}
}
}
}
}
exmp:返回
"aggs1": {
"buckets": [
{
"key_as_string": "5",
"key": 1452852000000,
"doc_count": 29500,
"aggs2": {
"value": 1
}
},
{
"key_as_string": "6",
"key": 1452866400000,
"doc_count": 15941,
"aggs2": {
"value": 2
}
},
{
"key_as_string": "5",
"key": 1452870000000,
"doc_count": 6121,
"aggs2": {
"value": 3
}
},
但我想要这个:
"aggs1": {
"buckets": [
{
"key_as_string": "5",
"key": 1452852000000,
"doc_count": 29500,
"aggs2": {
"value": 4
}
},
{
"key_as_string": "6",
"key": 1452866400000,
"doc_count": 15941,
"aggs2": {
"value": 2
}
}
},
答案 0 :(得分:1)
然后您可以使用terms aggregation
。使用以下查询:
{
"size":0,
"query":{
"filtered":{
"filter":{
}
}
},
"aggs":{
"aggs1":{
"terms":{
"script": "new
DateTime(doc['loggingdate'].value).getHourOfDay()",
"order":{
"aggs2":"desc"
}
},
"aggs":{
"aggs2":{
"sum":{
"field":"respsize"
}
}
}
}
}
}
我想它会取得你想要的结果。