【发布时间】:2019-10-15 11:48:51
【问题描述】:
我有一个场景,我想从 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 行被删除,因为它们引用了具有较旧 TradeRefDate (2019-01-01 13:00) 的 Trade Refs 'A' 和 'B'。
索引中更新的行包含相同的 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"]}
}
}
}
}
}
}
【问题讨论】:
标签: elasticsearch elasticsearch-aggregation