Агрегирование Avg
Агрегирование single-value, которое вычисляет среднее значение числовых значений, извлечённых из агрегированных документов. Эти значения могут быть извлечены из определённых числовых полей в документах.
Предполагая, что данные состоят из документов, представляющих оценки по экзаменам (от 0 до 100) студентов, мы можем вычислить средний балл:
POST /exams/_search?size=0
{
"aggs": {
"avg_grade": { "avg": { "field": "grade" } }
}
} Вышеуказанное агрегирование вычисляет среднюю оценку по всем документам. Тип агрегирования - avg, а field параметр определяет числовое поле документов, по которому будет вычисляться среднее значение. Вышеуказанное вернёт следующее:
{
...
"aggregations": {
"avg_grade": {
"value": 75.0
}
}
} Имя агрегирования (avg_grade выше) также служит ключом, по которому результат агрегирования может быть извлечён из возвращённого ответа.
Скрипт
Допустим, экзамен был чрезвычайно сложным, и вам нужно внести поправку в оценки. Вычислите среднее значение поля runtime, чтобы получить исправленное среднее значение:
POST /exams/_search?size=0
{
"runtime_mappings": {
"grade.corrected": {
"type": "double",
"script": {
"source": "emit(Math.min(100, doc['grade'].value * params.correction))",
"params": {
"correction": 1.2
}
}
}
},
"aggs": {
"avg_corrected_grade": {
"avg": {
"field": "grade.corrected"
}
}
}
} Пропущенное значение
Параметр missing определяет, как должны обрабатываться документы, в которых отсутствует значение. По умолчанию они будут игнорироваться, но также можно обработать их так, как будто у них есть значение.
POST /exams/_search?size=0
{
"aggs": {
"grade_avg": {
"avg": {
"field": "grade",
"missing": 10
}
}
}
} | Документы без значения в поле |
Поля гистограммы
Когда среднее значение вычисляется по полям гистограммы, результатом агрегирования является взвешенное среднее всех элементов в массиве values, учитывая количество в той же позиции в массиве counts.
Например, для следующего индекса, который хранит предварительно агрегированные гистограммы с метриками задержки для различных сетей:
PUT metrics_index/_doc/1
{
"network.name" : "net-1",
"latency_histo" : {
"values" : [0.1, 0.2, 0.3, 0.4, 0.5],
"counts" : [3, 7, 23, 12, 6]
}
}
PUT metrics_index/_doc/2
{
"network.name" : "net-2",
"latency_histo" : {
"values" : [0.1, 0.2, 0.3, 0.4, 0.5],
"counts" : [8, 17, 8, 7, 6]
}
}
POST /metrics_index/_search?size=0
{
"aggs": {
"avg_latency":
{ "avg": { "field": "latency_histo" }
}
}
} Для каждого поля гистограммы агрегирование avg добавляет каждое число в массиве values <1> , умноженное на соответствующее количество в массиве counts <2>. В конечном итоге оно вычислит среднее значение по этим значениям для всех гистограмм и вернёт следующий результат:
{
...
"aggregations": {
"avg_latency": {
"value": 0.29690721649
}
}
}
© 2023-2025 Elasticsearch
As of September 2024, Elasticsearch is available under a choice of three licenses: the Server Side Public License (SSPL), the Elastic License, or the AGPLv3 (OSI approved).
Elasticsearch and the Elasticsearch logo are trademarks of Elasticsearch B.V., registered in the U.S. and in other countries.
https://www.elastic.co/guide/en/elasticsearch/reference/7.17/search-aggregations-metrics-avg-aggregation.html