如何使用AWS Elasticsearch Aggregation按规则筛选交易状态记录
AWS Elasticsearch 按规则筛选交易记录实现方案
核心思路
要实现需求只需利用聚合的分组加组内排序取首条能力即可:
- 先按
Transaction Id将同一交易的所有记录分到同一个桶 - 组内给不同状态设置优先级权重:
success优先级高于pending - 每个组只取优先级最高的1条记录,即可得到符合要求的结果
具体查询DSL
{ "size": 0, "aggs": { "group_by_transaction_id": { "terms": { "field": "Transaction Id.keyword", "size": 10000 // 可根据实际交易总笔数调整,保证覆盖所有交易即可 }, "aggs": { "get_valid_record": { "top_hits": { "sort": [ { "_script": { "type": "number", "script": { "lang": "painless", "source": "if(doc['Status.keyword'].value == 'success') return 2; else if(doc['Status.keyword'].value == 'pending') return 1; return 0;" }, "order": "desc" } } ], "size": 1 } } } } } }
注意:如果你的
Transaction Id和Status字段本身就是keyword类型,不需要加.keyword后缀,直接写字段名即可。
结果提取
查询返回后,遍历aggregations.group_by_transaction_id.buckets下的每个桶,取get_valid_record.hits.hits[0]的内容就是对应交易符合规则的记录,最终整理结果和预期完全一致:
| 序号 | Transaction Id | Amount | Status |
|---|---|---|---|
| 2 | AA001 | 100 | success |
| 3 | AA002 | 200 | pending |
内容的提问来源于stack exchange,提问作者Thangadurai A
相关产品推荐
相关产品推荐

