Подтвердить что ты не робот

ElasticSearch вычисляет процент для каждого ведра от общего количества

Я использую ElasticSearch v5. Я пытаюсь сделать что-то подобное в проценте аналитики elasticsearch, где у меня есть агрегирование терминов, и я хочу рассчитать процент, который является значением из каждого ведра по сравнению с общим количеством всех ковшей. Это мой запрос:

{
  "query": {
    "match_all": {}
  },
  "aggs": {
    "periods": {
      "terms": { 
        "field": "periods",
        "size": 3
      },
      "aggs": {
        "balance": {
          "sum": {
            "field": "balance"
          }
        }
      }
    },
    "total_balance": {
        "sum_bucket": {
            "buckets_path": "periods>balance" 
        }
    }
  }

}

В результате я вернусь вот так:

{
  "aggregations": {
    "periods": {
      "doc_count_error_upper_bound": 0,
      "sum_other_doc_count": 1018940846,
      "buckets": [
        {
          "key": 1177977600000,
          "doc_count": 11615418,
          "balance": {
            "value": 2492032741768.1616
       }
       },
       {
          "key": 1185926400000,
          "doc_count": 11592425,
          "balance": {
            "value": 2575365325406.6533
      }
      },
      {
          "key": 1175385600000,
          "doc_count": 11477402,
          "balance": {
            "value": 2456256695380.8306
          }
        }
      ]
    },
    "total_balance": {
      "value": 7523654762555.645
    }
  }
}

Как рассчитать "баланс" / "total_balance" для каждого элемента в ведре от ElasticSearch? Я попробовал агрегацию bucket script на уровне ведра (периодов), но я не могу установить свой buckets_path для total_balance. Этот пост https://discuss.elastic.co/t/combining-two-aggregations-to-get-term-percentage/22201 рассказывает об использовании агрегирования значимых терминов, но мне нужен расчет использования определенных полей, а не doc_count. Я знаю, что могу сделать это как простой расчет на стороне клиента, но я хотел бы сделать это все вместе в ElasticSearch, если это возможно.

4b9b3361

Ответ 1

Нет, вы не можете этого сделать. К тому моменту, когда я пишу этот пост, мы находимся в версии 6.1.

Согласно https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-pipeline.html#buckets-path-syntax, существует только два основных типа конвейеров: родитель и братья и сестры.

Итак, чтобы ссылаться на агрегацию total_balance из веток периодов, мы должны иметь возможность ссылаться на агрегацию "дядя" из атрибута buckets_path, что невозможно.