不要急,总有办法的

elasticsearch 聚合结果计算问题?

Elasticsearch | 作者 imhui | 发布于2016年10月26日 | 阅读数:7626

使用elasticsearch过程中遇到一个问题,需要对前面的聚合结果进行计算,不知道该怎么处理,求大神指教。

例如一下聚合语句:
   "aggs": {
"yesterday": {
"filter": {
"range": {
"timestamp": {
"from": 1476806400000,
"to": 1476892555000
}
}
},
"aggs": {
"eventA_count": {
"filter": {
"term": {
"event": "eventA"
}
}
},
"eventB_count": {
"filter": {
"term": {
"event": "eventB"
}
}
},
"(eventA / eventB)的结果":{
......
}
}
}
}
上面的语句,去掉「(eventA/eventB)的结果」这个部分的语句,聚合结果中可以得到以下数据,
"aggregations": {
"yesterday": {
"doc_count": 42,
"eventA_count": {
"doc_count": 30
},
"eventB_count": {
"doc_count": 12
}
}
}
聚合语句中,通过filter可以得到eventA_count, eventB_count的值,现在想计算(eventA_count/eventB_count)的结果,上面(eventA_count/eventB_count)的结果中的处理语句该怎么写?
已邀请:

strglee

赞同来自: iusoft

bucket_script​支持类似的方法,但是它有两点限制 1.父聚合只能是多桶聚合 2.只能对value值进行运算。
"aggs": {
"yesterday": {
"range": {
"field": "timestamp",
"ranges": [
{
"from": 1476806400000,
"to": 1476892555000
}
]
},
"date_histogram": {
"field": "timestrapt",
"interval": "day"
},
"aggs": {
"eventA_count": {
"filter": {
"term": {
"event": "eventA"
},
"aggs": {
"val": {
"value_count": {
"field": "event"
}
}
}
}
},
"eventB_count": {
"filter": {
"term": {
"event": "eventB"
}
},
"aggs": {
"val": {
"value_count": {
"field": "event"
}
}
}
},
"(eventA / eventB)": {
"bucket_script": {
"buckets_path": {
"event_a": "eventA_count.val",
"event_b": "eventB_count.val"
},
"script": "event_a / event_b"
}
}
}
}
}

要回复问题请先登录注册