Агрегация скользящих перцентилей
Для заданной упорядоченной серии перцентилей, агрегация скользящих перцентилей будет сдвигать окно по этим перцентилям и позволит пользователю вычислить кумулятивную перцентиль.
Это концептуально очень похоже на агрегацию скользящей функции, за исключением того, что она работает с эскизами перцентилей вместо фактических значений корзинок.
Синтаксис
Агрегация moving_percentiles выглядит следующим образом изолированно:
{
"moving_percentiles": {
"buckets_path": "the_percentile",
"window": 10
}
} Таблица 76. moving_percentiles Параметры
| Имя параметра | Описание | Обязательно | Значение по умолчанию |
|---|---|---|---|
| Путь к интересующей перцентили (см. | Обязательно | |
| Размер окна для "скольжения" по гистограмме. | Обязательно | |
| Сдвиг позиции окна. | Необязательно | 0 |
Агрегации moving_percentiles должны быть встроены в histogram или date_histogram агрегацию. Они могут быть встроены как любая другая метрическая агрегация:
resp = client.search(
size=0,
aggs={
"my_date_histo": {
"date_histogram": {
"field": "date",
"calendar_interval": "1M"
},
"aggs": {
"the_percentile": {
"percentiles": {
"field": "price",
"percents": [
1,
99
]
}
},
"the_movperc": {
"moving_percentiles": {
"buckets_path": "the_percentile",
"window": 10
}
}
}
}
},
)
print(resp) response = client.search(
body: {
size: 0,
aggregations: {
my_date_histo: {
date_histogram: {
field: 'date',
calendar_interval: '1M'
},
aggregations: {
the_percentile: {
percentiles: {
field: 'price',
percents: [
1,
99
]
}
},
the_movperc: {
moving_percentiles: {
buckets_path: 'the_percentile',
window: 10
}
}
}
}
}
}
)
puts response const response = await client.search({
size: 0,
aggs: {
my_date_histo: {
date_histogram: {
field: "date",
calendar_interval: "1M",
},
aggs: {
the_percentile: {
percentiles: {
field: "price",
percents: [1, 99],
},
},
the_movperc: {
moving_percentiles: {
buckets_path: "the_percentile",
window: 10,
},
},
},
},
},
});
console.log(response); POST /_search
{
"size": 0,
"aggs": {
"my_date_histo": {
"date_histogram": {
"field": "date",
"calendar_interval": "1M"
},
"aggs": {
"the_percentile": {
"percentiles": {
"field": "price",
"percents": [ 1.0, 99.0 ]
}
},
"the_movperc": {
"moving_percentiles": {
"buckets_path": "the_percentile",
"window": 10
}
}
}
}
}
} | Создается | |
| Используется метрическая | |
| Наконец, мы указываем агрегацию |
Скользящие перцентили строятся, сначала указав histogram или date_histogram над полем. Затем вы добавляете метрическую перцентиль внутри этой гистограммы. Наконец, moving_percentiles встраивается в гистограмму. Параметр buckets_path используется для указания на агрегацию перцентилей внутри гистограммы (см. buckets_path Синтаксис для описания синтаксиса buckets_path).
И вот, возможно, ответ:
{
"took": 11,
"timed_out": false,
"_shards": ...,
"hits": ...,
"aggregations": {
"my_date_histo": {
"buckets": [
{
"key_as_string": "2015/01/01 00:00:00",
"key": 1420070400000,
"doc_count": 3,
"the_percentile": {
"values": {
"1.0": 151.0,
"99.0": 200.0
}
}
},
{
"key_as_string": "2015/02/01 00:00:00",
"key": 1422748800000,
"doc_count": 2,
"the_percentile": {
"values": {
"1.0": 10.4,
"99.0": 49.6
}
},
"the_movperc": {
"values": {
"1.0": 151.0,
"99.0": 200.0
}
}
},
{
"key_as_string": "2015/03/01 00:00:00",
"key": 1425168000000,
"doc_count": 2,
"the_percentile": {
"values": {
"1.0": 175.25,
"99.0": 199.75
}
},
"the_movperc": {
"values": {
"1.0": 11.6,
"99.0": 200.0
}
}
}
]
}
}
} Формат вывода агрегации moving_percentiles унаследован от формата агрегации percentiles.
Агрегации скользящих перцентилей всегда выполняются с политикой зазора skip.
Параметр shift
По умолчанию (с shift = 0), окно, предлагаемое для расчёта, включает последние n значения за исключением текущей корзины. Увеличение shift на 1 сдвигает начальную позицию окна на 1 вправо.
- Чтобы включить текущую корзину в окно, используйте
shift = 1. - Для центрирования (
n / 2значения до и после текущей корзины), используйтеshift = window / 2. - Для выравнивания по правому краю (
nзначения после текущей корзины), используйтеshift = window.
Если какой-либо край окна выходит за границы ряда данных, окно сужается до включения только доступных значений.
© 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/8.17/search-aggregations-pipeline-moving-percentiles-aggregation.html