Вложенный запрос агрегации ElasticSearch для периода дат: я хочу узнать за период времени, сколько пользователей было в каждом «весе» в день (конец дня) - PullRequest
0 голосов
/ 10 октября 2019

Учитывая диапазон времени: 2019-10-10 - 2019-16-10,

Я хочу получить количество активных пользователей за каждый день, сгруппированное по их weight

Пример набора данных:

{
    "user": "Tom",
    "start_date_time": "2019-10-10 10:00:00",
    "end_date_time": "2019-10-10 11:00:00",
    "weight": 5,
    .....
}

{
    "user": "Tom",
    "start_date_time": "2019-10-10 11:00:00",
    "end_date_time": "2019-12-10 11:00:00",
    "weight": 10,
    .....
}

{
    "user": "Tom",
    "start_date_time": "2019-12-10 11:00:00",
    "end_date_time": "2019-14-10 11:00:00",
    "weight": 15,
    .....
}

{
    "user": "Tom",
    "start_date_time": "2019-14-10 11:00:00",
    "end_date_time": ,
    "weight": 20,
    .....
}
{
    "user": "Seva",
    "start_date_time": "2019-12-10 08:00:00",
    "end_date_time": "2019-13-10 09:00:00",
    "weight": 5,
    .....
}

{
    "user": "Seva",
    "start_date_time": "2019-13-10 09:00:00",
    "end_date_time": "2019-15-10 11:00:00",
    "weight": 15,
    .....
}

{
    "user": "Seva",
    "start_date_time": "2019-15-10 11:00:00",
    "end_date_time": null",
    "weight": 20,
    .....
}

Ожидаемый результат:

Date        Weight Unique Count
2019-10-10  5       1
            10      1
            15      0
            20      0
2019-11-10  5       1
            10      1
            15      0
            20      0
2019-12-10  5       1
            10      0
            15      1
            20      0
2019-13-10  5       0
            10      0
            15      2
            20      0
2019-14-10  5       0
            10      0
            15      1
            20      1
2019-15-10  5       0
            10      0
            15      0
            20      2
2019-16-10  5       0
            10      0
            15      0
            20      2

1 Ответ

0 голосов
/ 10 октября 2019

Вы можете сделать это так:

{
  "size": 0,
  "aggs": {
    "days": {
      "date_histogram": {
        "field": "end_date_time",
        "interval": "day",
        "min_doc_count": 1
      },
      "aggs": {
        "weights": {
          "terms": {
            "field": "weight"
          },
          "aggs": {
            "user_count": {
              "cardinality": {
                "field": "user.keyword"
              }
            }
          }
        }
      }
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...