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

Агрегирование bucket script

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

Синтаксис

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

{
  "bucket_script": {
    "buckets_path": {
      "my_var1": "the_sum",                     
      "my_var2": "the_value_count"
    },
    "script": "params.my_var1 / params.my_var2"
  }
}

Здесь, my_var1 — имя переменной для использования в пути к бакету в скрипте, а the_sum — путь к метрикам для использования в этой переменной.

Таблица 49. Параметры bucket_script

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

script

Скрипт, который необходимо выполнить для этого агрегирования. Скрипт может быть встроенным, файловым или индексированным. (подробнее см. Скрипты)

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

buckets_path

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

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

gap_policy

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

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

skip

format

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

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

null

Следующий фрагмент вычисляет процентное соотношение продаж футболок к общему объему продаж каждый месяц:

POST /sales/_search
{
  "size": 0,
  "aggs": {
    "sales_per_month": {
      "date_histogram": {
        "field": "date",
        "calendar_interval": "month"
      },
      "aggs": {
        "total_sales": {
          "sum": {
            "field": "price"
          }
        },
        "t-shirts": {
          "filter": {
            "term": {
              "type": "t-shirt"
            }
          },
          "aggs": {
            "sales": {
              "sum": {
                "field": "price"
              }
            }
          }
        },
        "t-shirt-percentage": {
          "bucket_script": {
            "buckets_path": {
              "tShirtSales": "t-shirts>sales",
              "totalSales": "total_sales"
            },
            "script": "params.tShirtSales / params.totalSales * 100"
          }
        }
      }
    }
  }
}

И следующим может быть ответ:

{
   "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,
               "total_sales": {
                   "value": 550.0
               },
               "t-shirts": {
                   "doc_count": 1,
                   "sales": {
                       "value": 200.0
                   }
               },
               "t-shirt-percentage": {
                   "value": 36.36363636363637
               }
            },
            {
               "key_as_string": "2015/02/01 00:00:00",
               "key": 1422748800000,
               "doc_count": 2,
               "total_sales": {
                   "value": 60.0
               },
               "t-shirts": {
                   "doc_count": 1,
                   "sales": {
                       "value": 10.0
                   }
               },
               "t-shirt-percentage": {
                   "value": 16.666666666666664
               }
            },
            {
               "key_as_string": "2015/03/01 00:00:00",
               "key": 1425168000000,
               "doc_count": 2,
               "total_sales": {
                   "value": 375.0
               },
               "t-shirts": {
                   "doc_count": 1,
                   "sales": {
                       "value": 175.0
                   }
               },
               "t-shirt-percentage": {
                   "value": 46.666666666666664
               }
            }
         ]
      }
   }
}

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

Spec-Zone.ru

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