Агрегирование MAX
Агрегирование метрик single-value, которое отслеживает и возвращает максимальное значение среди числовых значений, извлеченных из агрегированных документов.
Агрегирования min и max работают с представлением данных double. Вследствие этого, результат может быть приблизительным при работе с числами типа long, абсолютное значение которых превышает 2^53.
Вычисление максимальной цены среди всех документов
POST /sales/_search?size=0
{
"aggs": {
"max_price": { "max": { "field": "price" } }
}
} Ответ:
{
...
"aggregations": {
"max_price": {
"value": 200.0
}
}
} Как видно, имя агрегирования (max_price выше) также служит ключом, по которому результат агрегирования можно получить из возвращенного ответа.
Скрипт
Если вам нужно получить max чего-то более сложного, чем просто отдельное поле, выполните агрегирование по полю runtime.
POST /sales/_search
{
"size": 0,
"runtime_mappings": {
"price.adjusted": {
"type": "double",
"script": """
double price = doc['price'].value;
if (doc['promoted'].value) {
price *= 0.8;
}
emit(price);
"""
}
},
"aggs": {
"max_price": {
"max": { "field": "price.adjusted" }
}
}
} Значение по умолчанию
Параметр missing определяет, как следует обрабатывать документы, у которых отсутствует значение. По умолчанию они будут игнорироваться, но также можно обработать их так, как будто у них есть значение.
POST /sales/_search
{
"aggs" : {
"grade_max" : {
"max" : {
"field" : "grade",
"missing": 10
}
}
}
} | Документы без значения в поле |
Поля гистограммы
Когда max вычисляется по полям гистограммы, результат агрегирования — это максимальное значение всех элементов в массиве values. Обратите внимание, что массив counts гистограммы игнорируется.
Например, для следующего индекса, который хранит предварительно агрегированные гистограммы с метриками задержки для разных сетей:
PUT metrics_index
{
"mappings": {
"properties": {
"latency_histo": { "type": "histogram" }
}
}
}
PUT metrics_index/_doc/1?refresh
{
"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?refresh
{
"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&filter_path=aggregations
{
"aggs" : {
"max_latency" : { "max" : { "field" : "latency_histo" } }
}
} Агрегирование max вернет максимальное значение всех полей гистограммы:
{
"aggregations": {
"max_latency": {
"value": 0.5
}
}
}
© 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-max-aggregation.html