Агрегация производной
Родительская агрегация по конвейеру, которая вычисляет производную указанного метрики в родительской агрегации гистограммы (или date_histogram). Указанная метрика должна быть числовой, а окружающая гистограмма должна иметь min_doc_count, установленное на 0 (по умолчанию для агрегаций histogram).
Синтаксис
Агрегация derivative выглядит следующим образом:
"derivative": {
"buckets_path": "the_sum"
} Таблица 54. Параметры агрегации derivative
| Имя параметра | Описание | Обязательно | Значение по умолчанию |
|---|---|---|---|
| Путь к корзинкам, для которых мы хотим найти производную (см. | Обязательно | |
| Политика, применяемая при обнаружении пробелов в данных (см. Обработка пробелов в данных для получения более подробной информации) | Необязательно |
|
| формат, применяемый к выходному значению этой агрегации | Необязательно |
|
Производная первого порядка
Следующий фрагмент кода вычисляет производную от общей ежемесячной sales:
POST /sales/_search
{
"size": 0,
"aggs": {
"sales_per_month": {
"date_histogram": {
"field": "date",
"calendar_interval": "month"
},
"aggs": {
"sales": {
"sum": {
"field": "price"
}
},
"sales_deriv": {
"derivative": {
"buckets_path": "sales"
}
}
}
}
}
} |
|
И вот возможный ответ:
{
"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,
"sales": {
"value": 550.0
}
},
{
"key_as_string": "2015/02/01 00:00:00",
"key": 1422748800000,
"doc_count": 2,
"sales": {
"value": 60.0
},
"sales_deriv": {
"value": -490.0
}
},
{
"key_as_string": "2015/03/01 00:00:00",
"key": 1425168000000,
"doc_count": 2,
"sales": {
"value": 375.0
},
"sales_deriv": {
"value": 315.0
}
}
]
}
}
} | Для первой корзины производная отсутствует, так как для вычисления производной необходимо как минимум 2 точки данных | |
| Единицы измерения значения производной неявно определяются агрегацией | |
| Количество документов в корзине представлено в |
Производная второго порядка
Производную второго порядка можно вычислить, объединив агрегацию производной по конвейеру с результатом другой агрегации производной по конвейеру, как показано в следующем примере, который вычисляет производную первого и второго порядка от общей ежемесячной прибыли:
POST /sales/_search
{
"size": 0,
"aggs": {
"sales_per_month": {
"date_histogram": {
"field": "date",
"calendar_interval": "month"
},
"aggs": {
"sales": {
"sum": {
"field": "price"
}
},
"sales_deriv": {
"derivative": {
"buckets_path": "sales"
}
},
"sales_2nd_deriv": {
"derivative": {
"buckets_path": "sales_deriv"
}
}
}
}
}
} |
|
И вот возможный ответ:
{
"took": 50,
"timed_out": false,
"_shards": ...,
"hits": ...,
"aggregations": {
"sales_per_month": {
"buckets": [
{
"key_as_string": "2015/01/01 00:00:00",
"key": 1420070400000,
"doc_count": 3,
"sales": {
"value": 550.0
}
},
{
"key_as_string": "2015/02/01 00:00:00",
"key": 1422748800000,
"doc_count": 2,
"sales": {
"value": 60.0
},
"sales_deriv": {
"value": -490.0
}
},
{
"key_as_string": "2015/03/01 00:00:00",
"key": 1425168000000,
"doc_count": 2,
"sales": {
"value": 375.0
},
"sales_deriv": {
"value": 315.0
},
"sales_2nd_deriv": {
"value": 805.0
}
}
]
}
}
} | Производная второго порядка для первых двух корзин отсутствует, так как для вычисления производной второго порядка требуется как минимум 2 точки данных от первой производной. |
Единицы измерения
Агрегация производной позволяет указать единицы измерения значений производной. Это возвращает дополнительное поле в ответе normalized_value, которое сообщает значение производной в требуемых единицах x-оси. В примере ниже мы вычисляем производную от общей прибыли за каждый месяц, но запрашиваем производную прибыли в единицах прибыли за день:
POST /sales/_search
{
"size": 0,
"aggs": {
"sales_per_month": {
"date_histogram": {
"field": "date",
"calendar_interval": "month"
},
"aggs": {
"sales": {
"sum": {
"field": "price"
}
},
"sales_deriv": {
"derivative": {
"buckets_path": "sales",
"unit": "day"
}
}
}
}
}
} |
|
И вот возможный ответ:
{
"took": 50,
"timed_out": false,
"_shards": ...,
"hits": ...,
"aggregations": {
"sales_per_month": {
"buckets": [
{
"key_as_string": "2015/01/01 00:00:00",
"key": 1420070400000,
"doc_count": 3,
"sales": {
"value": 550.0
}
},
{
"key_as_string": "2015/02/01 00:00:00",
"key": 1422748800000,
"doc_count": 2,
"sales": {
"value": 60.0
},
"sales_deriv": {
"value": -490.0,
"normalized_value": -15.806451612903226
}
},
{
"key_as_string": "2015/03/01 00:00:00",
"key": 1425168000000,
"doc_count": 2,
"sales": {
"value": 375.0
},
"sales_deriv": {
"value": 315.0,
"normalized_value": 11.25
}
}
]
}
}
} |
| |
|
|
© 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-derivative-aggregation.html