如何从含success/fail标识的索引日志中筛选仅存失败记录的项目
筛选仅含失败记录的项目列表
核心逻辑
要找出从未出现过成功记录的项目,核心思路是:
- 先定位所有有过成功记录的项目,将它们排除
- 剩余的项目即为仅存在失败记录的目标对象
示例数据
| Date | User | Status |
|---|---|---|
| Jan 01 | user1 | Fail |
| Jan 02 | User1 | Success |
| Jan 01 | User2 | Fail |
| Jan 02 | User2 | Fail |
示例结果
User2
具体实现方式
1. SQL实现
如果数据存储在关系型数据库中,可使用以下查询语句:
SELECT DISTINCT User FROM log_table WHERE User NOT IN ( SELECT DISTINCT User FROM log_table WHERE Status = 'Success' );
2. Elasticsearch实现
如果数据存储在Elasticsearch索引中,可通过聚合查询实现:
{ "size": 0, "aggs": { "all_users": { "terms": { "field": "User.keyword", "size": 1000 }, "aggs": { "has_success": { "filter": { "term": { "Status": "Success" } } }, "only_fail": { "bucket_selector": { "buckets_path": { "success_count": "has_success._count" }, "script": "params.success_count == 0" } } } } } }
执行后,all_users聚合返回的结果就是仅含失败记录的项目列表。
内容的提问来源于stack exchange,提问作者Nada Nasser
相关产品推荐
相关产品推荐

