Получить средние значения по дате и гистограмме

У меня есть следующий запрос, где получить данные, и я создаю агрегацию каждого прошедшего часа:

    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" } 
                        }
                    }
                }
            }
        }
Другие вопросы по тегам