Получить средние значения по дате и гистограмме
У меня есть следующий запрос, где получить данные, и я создаю агрегацию каждого прошедшего часа:
query = {
"query": {
"bool": {
"must": [
{ "term": {"deviceId":device} },
{ "match": {"eventType":"Connected"} }
],
"must_not":[{
"query_string": {
"query": "Pong",
"fields": ["data.message"]
}
},
]
},
},
"size": 0,
"sort": [{ "timestamp": { "order": "desc" }}],
"aggs" : {
"time_buckets" : {
"date_histogram" : {
"field" : "timestamp",
"interval" : "hour",
},
}
}
}
Я хотел бы получить среднее значение поля для каждого часового интервала (каждый сегмент, созданный агрегацией). В этой статье они рассказывают о чем-то похожем с тем, что я хочу сделать: http://www.elasticsearch.org/guide/en/elasticsearch/guide/current/_looking_at_time.html("Какова средняя задержка нашего сайта каждый час на прошлой неделе?"). Тем не менее, они не объясняют точно, что делать в этом случае.
Кто-нибудь знает как это сделать?
1 ответ
Решение
Просто понял, что я мог бы сделать вложенную агрегацию и затем вычислить среднее значение поля внутри агрегации. Вот что я сделал, и теперь он работает правильно:
query = {
"query": {
"bool": {
"must": [
{ "term": {"deviceId":device} },
{ "match": {"eventType":"Connected"} }
],
"must_not":[{
"query_string": {
"query": "Pong",
"fields": ["data.message"]
}
},
]
},
},
"size": 0,
"sort": [{ "timestamp": { "order": "desc" }}],
"aggs" : {
"time_buckets" : {
"date_histogram" : {
"field" : "timestamp",
"interval" : "day"
},
"aggs" : {
"avg_battery" : {
"avg": { "field": "data.battery-level" }
}
}
}
}
}