Spec-Zone.ru › Elasticsearch 8
›Elasticsearch Guide [8.17] ›Агрегирования ›Агрегирования с использованием конвейера

Агрегирование extended stats по корзинам

Агрегирование по конвейеру, которое рассчитывает различные статистические данные по всем корзинам заданного метрического агрегирования. Заданная метрика должна быть числовой, а агрегирование по конвейеру должно быть агрегированием с несколькими корзинами.

Это агрегирование предоставляет несколько дополнительных статистических данных (сумма квадратов, стандартное отклонение и т. д.) по сравнению с агрегированием stats_bucket.

Синтаксис

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

{
  "extended_stats_bucket": {
    "buckets_path": "the_sum"
  }
}

Таблица 62. extended_stats_bucket Параметры

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

buckets_path

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

Обязательно

gap_policy

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

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

skip

format

Шаблон DecimalFormat для выходного значения. Если указано, отформатированное значение возвращается в свойстве value_as_string агрегирования

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

null

sigma

Количество стандартных отклонений выше/ниже среднего для отображения

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

2

Следующий фрагмент рассчитывает расширенную статистику для ежемесячных sales корзин:

resp = client.search(
    index="sales",
    size=0,
    aggs={
        "sales_per_month": {
            "date_histogram": {
                "field": "date",
                "calendar_interval": "month"
            },
            "aggs": {
                "sales": {
                    "sum": {
                        "field": "price"
                    }
                }
            }
        },
        "stats_monthly_sales": {
            "extended_stats_bucket": {
                "buckets_path": "sales_per_month>sales"
            }
        }
    },
)
print(resp)
response = client.search(
  index: 'sales',
  body: {
    size: 0,
    aggregations: {
      sales_per_month: {
        date_histogram: {
          field: 'date',
          calendar_interval: 'month'
        },
        aggregations: {
          sales: {
            sum: {
              field: 'price'
            }
          }
        }
      },
      stats_monthly_sales: {
        extended_stats_bucket: {
          buckets_path: 'sales_per_month>sales'
        }
      }
    }
  }
)
puts response
const response = await client.search({
  index: "sales",
  size: 0,
  aggs: {
    sales_per_month: {
      date_histogram: {
        field: "date",
        calendar_interval: "month",
      },
      aggs: {
        sales: {
          sum: {
            field: "price",
          },
        },
      },
    },
    stats_monthly_sales: {
      extended_stats_bucket: {
        buckets_path: "sales_per_month>sales",
      },
    },
  },
});
console.log(response);
POST /sales/_search
{
  "size": 0,
  "aggs": {
    "sales_per_month": {
      "date_histogram": {
        "field": "date",
        "calendar_interval": "month"
      },
      "aggs": {
        "sales": {
          "sum": {
            "field": "price"
          }
        }
      }
    },
    "stats_monthly_sales": {
      "extended_stats_bucket": {
        "buckets_path": "sales_per_month>sales" 
      }
    }
  }
}

bucket_paths указывает этому агрегированию extended_stats_bucket, что мы хотим вычислить статистику для агрегирования sales в гистограмме дат sales_per_month.

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

{
   "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
               }
            },
            {
               "key_as_string": "2015/03/01 00:00:00",
               "key": 1425168000000,
               "doc_count": 2,
               "sales": {
                  "value": 375.0
               }
            }
         ]
      },
      "stats_monthly_sales": {
         "count": 3,
         "min": 60.0,
         "max": 550.0,
         "avg": 328.3333333333333,
         "sum": 985.0,
         "sum_of_squares": 446725.0,
         "variance": 41105.55555555556,
         "variance_population": 41105.55555555556,
         "variance_sampling": 61658.33333333334,
         "std_deviation": 202.74505063146563,
         "std_deviation_population": 202.74505063146563,
         "std_deviation_sampling": 248.3109609609156,
         "std_deviation_bounds": {
           "upper": 733.8234345962646,
           "lower": -77.15676792959795,
           "upper_population" : 733.8234345962646,
           "lower_population" : -77.15676792959795,
           "upper_sampling" : 824.9552552551645,
           "lower_sampling" : -168.28858858849787
         }
      }
   }
}

© 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-extended-stats-bucket-aggregation.html

Spec-Zone.ru

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