У меня есть сценарий, в котором я хотел бы вернуть последние ненормализованные данные из индекса в Elasticsearch, сгруппированного по определенному значению ключа - в сценарии ниже => TradeRef.
Ниже приведена лучшая картина сохраняемых данных в индексе:
{"Row": "1", "TradeRef": "A", "TradeRefDate": "2019-01-01 13:00", "TradeRefId": "FFF", "MessageId": "XXX", "MessageStatus": "S-Open"},
{"Row": "2", "TradeRef": "B", "TradeRefDate": "2019-01-01 13:00", "TradeRefId": "GGG", "MessageId": "YYY", "MessageStatus": "P-Open"},
{"Row": "3", "TradeRef": "C", "TradeRefDate": "2019-01-01 13:00", "TradeRefId": "HHH", "MessageId": "ZZZ", "MessageStatus": "Q-Open"},
{"Row": "4", "TradeRef": "A", "TradeRefDate": "2019-01-01 14:00", "TradeRefId": "III", "MessageId": "AAA", "MessageStatus": "R-Open"},
{"Row": "5", "TradeRef": "B", "TradeRefDate": "2019-01-01 14:00", "TradeRefId": "JJJ", "MessageId": "BBB", "MessageStatus": "T-Open"},
{"Row": "6", "TradeRef": "A", "TradeRefDate": "2019-01-01 14:00", "TradeRefId": "III", "MessageId": "CCC", "MessageStatus": "R-Open"},
{"Row": "7", "TradeRef": "B", "TradeRefDate": "2019-01-01 14:00", "TradeRefId": "JJJ", "MessageId": "DDD", "MessageStatus": "T-Open"}
Я хочу, чтобы мой запрос возвратил следующие результаты, где строки 1 и 2 исключены, поскольку они ссылаются на торговые ссылки 'A & B с более ранней датой TradeRefDate (2019-01-01 13:00).
Более свежие строки в индексе содержат тот же TradeRef 'A' и 'B' с более поздней TradeRefDate (2019-01-01 14:00):
{"Row": "3", "TradeRef": "C", "TradeRefDate": "2019-01-01 13:00", "TradeRefId": "HHH", "MessageId": "ZZZ", "MessageStatus": "Q-Open"},
{"Row": "4", "TradeRef": "A", "TradeRefDate": "2019-01-01 14:00", "TradeRefId": "III", "MessageId": "AAA", "MessageStatus": "R-Open"},
{"Row": "5", "TradeRef": "B", "TradeRefDate": "2019-01-01 14:00", "TradeRefId": "JJJ", "MessageId": "BBB", "MessageStatus": "T-Open"},
{"Row": "6", "TradeRef": "A", "TradeRefDate": "2019-01-01 14:00", "TradeRefId": "III", "MessageId": "CCC", "MessageStatus": "R-Open"},
{"Row": "7", "TradeRef": "B", "TradeRefDate": "2019-01-01 14:00", "TradeRefId": "JJJ", "MessageId": "DDD", "MessageStatus": "T-Open"}
Любая помощьбудет оценено. Я пробовал приведенный ниже запрос, но он просто дает мне одну строку на TradeRef вместо соответствующих записей, связанных с последним значением TradeRef:
GET /flattened_index_v1/_search
{
"from": 0,
"query": {
"bool": {
"must": [
{
"range": {
"TradeRefDate": {
"gte": "2018-09-01T00:00:00",
"lte": "2019-10-26T00:00:00"
}
}
},
{
"exists": {
"field": "MessageId"
}
}
]
}
},
"size": 0,
"aggs": {
"grp_by_trade_ref": {
"terms": {
"field": "TradeRef.keyword",
"size": 1000
},
"aggs": {
"latest_trecs": {
"top_hits": {
"size": 1,
"sort": [
{
"TradeRefDate": {
"order": "desc"
}
}
],
"_source": {"includes": ["TradeRef", "TradeRefId", "MessageId", "MessageStatus", "TradeRefDate"]}
}
}
}
}
}
}