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

Агрегирование выбора ведра

Родительское агрегирование по конвейеру, которое выполняет скрипт, определяющий, будет ли текущее ведро сохранено в родительском агрегировании с несколькими ведрами. Указанный метрический показатель должен быть числовым, а скрипт должен возвращать булево значение. Если язык скрипта — expression, то разрешается числовое возвращаемое значение. В этом случае 0.0 будет интерпретировано как false, а все остальные значения будут интерпретированы как true.

Агрегирование `bucket_selector`, как и все агрегирования по конвейеру, выполняется после всех других агрегирований. Это означает, что использование агрегирования `bucket_selector` для фильтрации возвращаемых ведер в ответе не экономит времени выполнения агрегирований.

Синтаксис

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

{
  "bucket_selector": {
    "buckets_path": {
      "my_var1": "the_sum",                     
      "my_var2": "the_value_count"
    },
    "script": "params.my_var1 > params.my_var2"
  }
}

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

Таблица 50. Параметры bucket_selector

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

script

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

Обязательно

buckets_path

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

Обязательно

gap_policy

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

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

skip

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

POST /sales/_search
{
  "size": 0,
  "aggs": {
    "sales_per_month": {
      "date_histogram": {
        "field": "date",
        "calendar_interval": "month"
      },
      "aggs": {
        "total_sales": {
          "sum": {
            "field": "price"
          }
        },
        "sales_bucket_filter": {
          "bucket_selector": {
            "buckets_path": {
              "totalSales": "total_sales"
            },
            "script": "params.totalSales > 200"
          }
        }
      }
    }
  }
}

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

{
   "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
               }
            },
            {
               "key_as_string": "2015/03/01 00:00:00",
               "key": 1425168000000,
               "doc_count": 2,
               "total_sales": {
                   "value": 375.0
               }
            }
         ]
      }
   }
}

Ведро для 2015/02/01 00:00:00 было удалено, так как его общие продажи были меньше 200

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

Spec-Zone.ru

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