Spec-Zone.ru › Elasticsearch 8
›Elasticsearch Guide [8.17] ›Агрегации ›Агрегации-фильтры

Агрегация скользящих перцентилей

Для заданной упорядоченной серии перцентилей, агрегация скользящих перцентилей будет сдвигать окно по этим перцентилям и позволит пользователю вычислить кумулятивную перцентиль.

Это концептуально очень похоже на агрегацию скользящей функции, за исключением того, что она работает с эскизами перцентилей вместо фактических значений корзинок.

Синтаксис

Агрегация moving_percentiles выглядит следующим образом изолированно:

{
  "moving_percentiles": {
    "buckets_path": "the_percentile",
    "window": 10
  }
}

Таблица 76. moving_percentiles Параметры

Имя параметра Описание Обязательно Значение по умолчанию

buckets_path

Путь к интересующей перцентили (см. buckets_path Синтаксис для получения дополнительной информации)

Обязательно

window

Размер окна для "скольжения" по гистограмме.

Обязательно

shift

Сдвиг позиции окна.

Необязательно

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
          }
        }
      }
    }
  }
}

Создается date_histogram под названием "my_date_histo" для поля "timestamp" с интервалами в один день

Используется метрическая percentile для расчёта перцентилей поля.

Наконец, мы указываем агрегацию moving_percentiles, которая использует эскиз "the_percentile" в качестве входных данных.

Скользящие перцентили строятся, сначала указав 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API