Агрегирование bucket script
Родительское агрегирование по конвейеру, которое выполняет скрипт, который может выполнять вычисления по каждому бакету на основе указанных метрик в родительском агрегировании с несколькими бакеттами. Указанная метрика должна быть числовой, а скрипт должен возвращать числовое значение.
Синтаксис
Агрегирование bucket_script выглядит следующим образом:
{
"bucket_script": {
"buckets_path": {
"my_var1": "the_sum",
"my_var2": "the_value_count"
},
"script": "params.my_var1 / params.my_var2"
}
} | Здесь, |
Таблица 49. Параметры bucket_script
| Имя параметра | Описание | Обязательный | Значение по умолчанию |
|---|---|---|---|
| Скрипт, который необходимо выполнить для этого агрегирования. Скрипт может быть встроенным, файловым или индексированным. (подробнее см. Скрипты) | Обязательный | |
| Карта переменных скрипта и соответствующих путей к бакеттам, которые необходимо использовать для переменной (подробнее см. Синтаксис | Обязательный | |
| Политика, применяемая при обнаружении разрывов в данных (подробнее см. Обработка разрывов в данных) | Необязательный |
|
| Формат, применяемый к выходному значению этого агрегирования | Необязательный |
|
Следующий фрагмент вычисляет процентное соотношение продаж футболок к общему объему продаж каждый месяц:
POST /sales/_search
{
"size": 0,
"aggs": {
"sales_per_month": {
"date_histogram": {
"field": "date",
"calendar_interval": "month"
},
"aggs": {
"total_sales": {
"sum": {
"field": "price"
}
},
"t-shirts": {
"filter": {
"term": {
"type": "t-shirt"
}
},
"aggs": {
"sales": {
"sum": {
"field": "price"
}
}
}
},
"t-shirt-percentage": {
"bucket_script": {
"buckets_path": {
"tShirtSales": "t-shirts>sales",
"totalSales": "total_sales"
},
"script": "params.tShirtSales / params.totalSales * 100"
}
}
}
}
}
} И следующим может быть ответ:
{
"took": 11,
"timed_out": false,
"_shards": ...,
"hits": ...,
"aggregations": {
"sales_per_month": {
"buckets": [
{
"key_as_string": "2015/01/01 00:00:00",
"key": 1420070400000,
"doc_count": 3,
"total_sales": {
"value": 550.0
},
"t-shirts": {
"doc_count": 1,
"sales": {
"value": 200.0
}
},
"t-shirt-percentage": {
"value": 36.36363636363637
}
},
{
"key_as_string": "2015/02/01 00:00:00",
"key": 1422748800000,
"doc_count": 2,
"total_sales": {
"value": 60.0
},
"t-shirts": {
"doc_count": 1,
"sales": {
"value": 10.0
}
},
"t-shirt-percentage": {
"value": 16.666666666666664
}
},
{
"key_as_string": "2015/03/01 00:00:00",
"key": 1425168000000,
"doc_count": 2,
"total_sales": {
"value": 375.0
},
"t-shirts": {
"doc_count": 1,
"sales": {
"value": 175.0
}
},
"t-shirt-percentage": {
"value": 46.666666666666664
}
}
]
}
}
}
© 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-pipeline-bucket-script-aggregation.html