Spec-Zone.ru › Elasticsearch 7
›Elasticsearch Guide [7.17] ›Агрегации ›Агрегации по конвейеру

Агрегация производной

Родительская агрегация по конвейеру, которая вычисляет производную указанного метрики в родительской агрегации гистограммы (или date_histogram). Указанная метрика должна быть числовой, а окружающая гистограмма должна иметь min_doc_count, установленное на 0 (по умолчанию для агрегаций histogram).

Синтаксис

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

"derivative": {
  "buckets_path": "the_sum"
}

Таблица 54. Параметры агрегации derivative

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

buckets_path

Путь к корзинкам, для которых мы хотим найти производную (см. buckets_path Синтаксис для получения более подробной информации)

Обязательно

gap_policy

Политика, применяемая при обнаружении пробелов в данных (см. Обработка пробелов в данных для получения более подробной информации)

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

skip

format

формат, применяемый к выходному значению этой агрегации

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

null

Производная первого порядка

Следующий фрагмент кода вычисляет производную от общей ежемесячной 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" 
          }
        }
      }
    }
  }
}

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 точки данных

Единицы измерения значения производной неявно определяются агрегацией sales и родительской гистограммой, поэтому в данном случае единицы измерения будут $/месяц, предположив, что поле price имеет единицы измерения $.

Количество документов в корзине представлено в doc_count

Производная второго порядка

Производную второго порядка можно вычислить, объединив агрегацию производной по конвейеру с результатом другой агрегации производной по конвейеру, как показано в следующем примере, который вычисляет производную первого и второго порядка от общей ежемесячной прибыли:

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

buckets_path для производной второго порядка указывает на имя первой производной

И вот возможный ответ:

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

unit указывает, какую единицу измерения использовать для оси x вычисления производной

И вот возможный ответ:

{
   "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
               }
            }
         ]
      }
   }
}

value сообщается в исходных единицах за месяц

normalized_value сообщается в требуемых единицах за день

© 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

Spec-Zone.ru

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