Elasticsearch - Сумма с группой по - PullRequest
0 голосов
/ 01 февраля 2019

Я не смог применить концепцию агрегирования цепочек ... Мне нужна помощь в этом сценарии:
Мои документы выглядят так:

{
  "date":"2019-01-30",
  "value":1234.56,
  "partnerId":9876
}

, и я хотел бы отфильтровать по дате (месяц) и суммируйте их по идентификатору партнера, а затем посчитайте его, получив результат, подобный:

{
   "partnerId": 9876,
   "totalValue": 12345567.87,
   "count": 6574
}

Как будет выглядеть этот запрос?

1 Ответ

0 голосов
/ 02 февраля 2019

То, чего вы пытаетесь достичь, может быть достигнуто путем субагрегации, другими словами агрегации внутри агрегации.

Для вашего случая сначала вы хотите сгруппировать по parternId, поэтому вам потребуется условияагрегация на parternId поле.Назовем это объединение partners.Это даст вам два значения ожидаемого результата: parternId и count.

Теперь для каждой из групп (сегментов) partnerId требуется totalValue, т. Е. Сумма valueдля каждого партнераЭто можно сделать, добавив сумма агрегации внутри термина агрегации partners.Таким образом, окончательный запрос вместе с фильтром для даты (месяца) будет:

{
  "query": {
    "bool": {
      "filter": {
        "range": {
          "date": {
            "gte": "2019-01-01",
            "lte": "2019-01-31"
          }
        }
      }
    }
  },
  "aggs": {
    "partner": {
      "terms": {
        "field": "partnerId"
      },
      "aggs": {
        "totalValue": {
          "sum": {
            "field": "value"
          }
        }
      }
    }
  }
}

Пример результата (только для agg):

"aggregations": {
    "partner": {
      "doc_count_error_upper_bound": 0,
      "sum_other_doc_count": 0,
      "buckets": [
        {
          "key": 9876,
          "doc_count": 3,
          "totalValue": {
            "value": 3704.68017578125
          }
        },
        {
          "key": 9878,
          "doc_count": 2,
          "totalValue": {
            "value": 2454.1201171875
          }
        }
      ]
    }

В результате выше key равно partnerId, doc_count - это count, а totalValue.value - totalValue вашего ожидаемого результата.

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