Есть массив, каждый элемент которого выглядит следующим образом:
-
t _id htqe7m0BSOdvtuXlL_IK
-
t _index currency_data
-
# _score -
-
t _type data
-
# player_id 457
-
# soft_currency_amount 95,792
-
soft_currency_last_update Oct 21, 2019 @ 16:57:01.000
Это информация об игроке, его балансе и дате последнего обновления баланса. Для отдельно взятого игрока может быть несколько таких накопившихся записей.
Задача - визуализировать данные, для начала в виде таблицы, отобразив баланс игрока на момент самого последнего обновления.
{
"aggs": {
"4": {
"terms": {
"field": "player_id",
"order": {
"_key": "asc"
},
"size": 400
},
"aggs": {
"2": {
"terms": {
"field": "soft_currency_amount",
"order": {
"2-orderAgg": "desc"
},
"size": 1
},
"aggs": {
"3": {
"terms": {
"field": "soft_currency_last_update",
"order": {
"1": "desc"
},
"size": 1
},
"aggs": {
"1": {
"cardinality": {
"field": "player_id"
}
}
}
},
"2-orderAgg": {
"max": {
"field": "soft_currency_last_update"
}
}
}
}
}
}
},
"size": 0,
"_source": {
"excludes": []
},
"stored_fields": [
"*"
],
"script_fields": {},
"docvalue_fields": [
{
"field": "soft_currency_last_update",
"format": "date_time"
}
],
"query": {
"bool": {
"must": [
{
"range": {
"soft_currency_last_update": {
"format": "strict_date_optional_time",
"gte": "2019-10-11T21:00:00.000Z",
"lte": "2019-10-12T20:30:00.000Z"
}
}
}
],
"filter": [
{
"match_all": {}
}
],
"should": [],
"must_not": []
}
}
В результате получается таблица со следующими колонками: player_id, soft_currency_amount, soft_currency_last_update и Unique count of player_id. Последняя метрика по сути бесполезна, используется для того, чтобы посчитать "хоть что-нибудь" для отображения остальных данных.
Информация в итоговой таблице получается верной за одним исключением: колонка "soft_currency_last_update" показывает не фактическую дату последнего обновления, а дату, когда появился соответствующий баланс.
Например, у игрока было 1200 монет на момент времени 21 октября в 13:00. Затем, в 17:00 баланс изменился, насчитывая 1300 монет. Следующее (и последнее) обновление баланса произошло на другой день, 22 октября в 8:00. На этот момент баланс остался неизменным, 1300 монет.
В данной ситуации строка таблицы будет содержать корректный id игрока, последнее значение его баланса (1300 монет), но графа даты будет указывать на 21 октября 17:00, а не на 22 октября 8:00.
Что не так?
И можно ли это всё визуализировать не в виде таблицы, а с виде столбчатой диаграммы (по y - баланс игрока, по x - id игрока)