Агрегация сортировки по корзинам
Родительская агрегация поэтапного типа, которая сортирует корзины родительской агрегации с несколькими корзинами. Можно указать ноль или более полей сортировки вместе с соответствующим порядком сортировки. Каждая корзина может быть отсортирована на основе ее _key, _count или ее дочерних агрегаций. Кроме того, можно установить параметры from и size для усечения результирующих корзин.
Агрегация bucket_sort, как и все агрегации поэтапного типа, выполняется после всех других агрегаций, не являющихся агрегациями поэтапного типа. Это означает, что сортировка применяется только к тем корзинам, которые уже возвращены родительской агрегацией. Например, если родительская агрегация является terms, и ее size установлено на значение 10, то bucket_sort будет сортировать только эти 10 возвращенных корзин с терминами.
Синтаксис
Агрегация bucket_sort в изоляции выглядит следующим образом:
{
"bucket_sort": {
"sort": [
{ "sort_field_1": { "order": "asc" } },
{ "sort_field_2": { "order": "desc" } },
"sort_field_3"
],
"from": 1,
"size": 3
}
} | Здесь, |
Таблица 51. Параметры bucket_sort
| Имя параметра | Описание | Обязательный | Значение по умолчанию |
|---|---|---|---|
| Список полей для сортировки. Более подробную информацию см. в разделе | Необязательно | |
| Корзины с позициями до установленного значения будут усечены. | Необязательно |
|
| Количество корзин для возврата. По умолчанию возвращаются все корзины родительской агрегации. | Необязательно | |
| Политика, применяемая при обнаружении пробелов в данных (подробнее см. в разделе Обработка пробелов в данных). | Необязательно |
|
Следующий фрагмент возвращает корзины, соответствующие 3 месяцам с наибольшим объемом продаж в порядке убывания:
POST /sales/_search
{
"size": 0,
"aggs": {
"sales_per_month": {
"date_histogram": {
"field": "date",
"calendar_interval": "month"
},
"aggs": {
"total_sales": {
"sum": {
"field": "price"
}
},
"sales_bucket_sort": {
"bucket_sort": {
"sort": [
{ "total_sales": { "order": "desc" } }
],
"size": 3
}
}
}
}
}
} |
| |
|
|
И вот возможный ответ:
{
"took": 82,
"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
}
},
{
"key_as_string": "2015/03/01 00:00:00",
"key": 1425168000000,
"doc_count": 2,
"total_sales": {
"value": 375.0
}
},
{
"key_as_string": "2015/02/01 00:00:00",
"key": 1422748800000,
"doc_count": 2,
"total_sales": {
"value": 60.0
}
}
]
}
}
} Усечение без сортировки
Также можно использовать эту агрегацию для усечения результирующих корзин без сортировки. Для этого просто используйте параметры from и/или size без указания sort.
Следующий пример просто усекает результат, чтобы вернуть только вторую корзину:
POST /sales/_search
{
"size": 0,
"aggs": {
"sales_per_month": {
"date_histogram": {
"field": "date",
"calendar_interval": "month"
},
"aggs": {
"bucket_truncate": {
"bucket_sort": {
"from": 1,
"size": 1
}
}
}
}
}
} Ответ:
{
"took": 11,
"timed_out": false,
"_shards": ...,
"hits": ...,
"aggregations": {
"sales_per_month": {
"buckets": [
{
"key_as_string": "2015/02/01 00:00:00",
"key": 1422748800000,
"doc_count": 2
}
]
}
}
}
© 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-sort-aggregation.html