Как рассчитать среднее значение, используя агрегированные значения в эластичном поиске? - PullRequest
0 голосов
/ 30 октября 2019

Если эта небольшая часть документа выглядит следующим образом,

{ "metricName" : "call", "createdDate" : "2019-10-31T00:00:00.000Z", "responseCode: "200" }
{ "metricName" : "email", "createdDate" : "2019-10-31T00:00:00.000Z", "responseCode: "400" }
{ "metricName" : "chat", "createdDate" : "2019-10-31T00:00:00.000Z", "responseCode: "300" }
.
.

Мне нужно выполнить следующие операции в одном запросе.

  1. Запрос должен позволить мне фильтровать записина основе createDate, responseCode и metricName.
  2. Результат должен быть сгруппирован по metricName и creationDate.
  3. Кроме того, необходимо извлечь количество записей для каждой группы по.
  4. Мне нужно найти среднее количество записей, содержащих определенный responseCode, на основе записей, созданных в одном и том же экземпляре (для данной созданной даты).

1 Ответ

0 голосов
/ 30 октября 2019

API агрегации позволяет группировать по нескольким полям, используя субагрегации. Предположим, вы хотите сгруппировать по полям field1, field2 и field3:

С помощью этого запроса будут решены ваши 1,2 и 3 вопроса.

POST /stackoverflow/_search?size=0
{
    "query": {
        "bool": {
            "must": [
                {
                    "match_phrase": {
                        "createdDate": {
                            "query": "2019-10-31T00:00:00.000Z",
                            "slop": 0,
                            "zero_terms_query": "NONE",
                            "boost": 1
                        }
                    }
                },
                {
                    "match_phrase": {
                        "responseCode": {
                            "query": "200",
                            "slop": 0,
                            "zero_terms_query": "NONE",
                            "boost": 1
                        }
                    }
                },
                {
                    "match_phrase": {
                        "metricName": {
                            "query": "call",
                            "slop": 0,
                            "zero_terms_query": "NONE",
                            "boost": 1
                        }
                    }
                }
            ]
        }
    },
    "aggr": {
        "agg1": {
            "terms": {
                "field": "metricName",
                "size": 10,
                "order": [
                    {
                        "_count": "desc"
                    },
                    {
                        "_key": "asc"
                    }
                ]
            }
        },
        "aggs": {
            "agg2": {
                "terms": {
                    "field": "createdDate",
                    "size": 10,
                    "order": [
                        {
                            "_count": "desc"
                        },
                        {
                            "_key": "asc"
                        }
                    ]
                }
            }
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...