Spec-Zone.ru › Elasticsearch 8
›Elasticsearch Guide [8.17] ›Агрегирования ›Агрегирования поэтапной обработки

Агрегирование sum_bucket

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

Синтаксис

Агрегирование sum_bucket выглядит так изолированно:

{
  "sum_bucket": {
    "buckets_path": "the_sum"
  }
}

Таблица 81. sum_bucket Параметры

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

buckets_path

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

Обязательный

gap_policy

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

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

skip

format

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

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

null

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

resp = client.search(
    index="sales",
    size=0,
    aggs={
        "sales_per_month": {
            "date_histogram": {
                "field": "date",
                "calendar_interval": "month"
            },
            "aggs": {
                "sales": {
                    "sum": {
                        "field": "price"
                    }
                }
            }
        },
        "sum_monthly_sales": {
            "sum_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'
            }
          }
        }
      },
      sum_monthly_sales: {
        sum_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",
          },
        },
      },
    },
    sum_monthly_sales: {
      sum_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"
          }
        }
      }
    },
    "sum_monthly_sales": {
      "sum_bucket": {
        "buckets_path": "sales_per_month>sales" 
      }
    }
  }
}

buckets_path указывает этому агрегации sum_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
               }
            }
         ]
      },
      "sum_monthly_sales": {
          "value": 985.0
      }
   }
}

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

Spec-Zone.ru

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