ElasticSearch Агрегация в агрегации - PullRequest
0 голосов
/ 26 февраля 2019

Я пытаюсь написать сценарий агрегирования для ElasticSearch.

Тип документа:

{
  Score: [1 , null, 3]
},
{
  Score: [2, 4, null + 3]
}

Я хочу получить среднее значение по всем показателям.Я написал простую Агрегацию, которая возвращает

(1 + 3 + 2 + 4 + 3) / 5 = 2.6

Но я хочу выполнить Среднее для каждого документа, а затем усреднить его.например,

[1 + 3] / 2 (# of scores in first document)
+
[2 + 4 + 3] / 3 (# of scores in second document)
= (2 + 3) / 2 (# of documents)
= 2.5

1 Ответ

0 голосов
/ 09 марта 2019

Я думаю, что этот запрос - то, что вы ищете:

{
  "size": 0,
  "aggs": {
    "group_by_id": {
      "terms": {
        "field": "_id"
      },
      "aggs": {
        "avg_by_group": {
          "avg": {
            "field": "score"
          }
        }
      }
    },
    "overall_avg": {
      "avg_bucket": {
        "buckets_path": "group_by_id>avg_by_group"
      }
    }
  }
}

Объяснение

Агрегация group_by_id создаст корзину для каждого документа, а подпункт avg_by_group-агрегация вычислит среднее значение score для каждого сегмента / документа.Наконец, overall_avg конвейерная агрегация вычислит среднее из средних значений.

...