You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ES6升级至ES7:如何修改Cardinality聚合查询过滤指定字段存在的文档?

解决方案

要筛选出user_id和campaign_id字段值均存在的文档,只需在原bool查询的must数组中添加两个exists查询条件即可,确保只有同时包含这两个字段的文档才会被纳入后续聚合计算,避免因字段缺失导致的报错。

修改后的完整查询如下:

{
    "query":{
        "bool":{
            "must":[
                {
                    "terms":{
                        "state":[
                            "pending",
                            "queued",
                            "deferred"
                        ]
                    }
                },
                {
                    "terms":{
                        "tenant_tag":[
                            "prod"
                        ]
                    }
                },
                {
                    "exists": {
                        "field": "user_id"
                    }
                },
                {
                    "exists": {
                        "field": "campaign_id"
                    }
                }
            ]
        }
    },
    "aggs":{
        "count":{
            "cardinality":{
                "script":"doc['user_id'].value + '_' + doc['campaign_id'].value"
            }
        }
    }
}

关键说明

  • exists查询会匹配指定字段存在且有非空值的文档,刚好满足排除缺失字段文档的需求。
  • 将这两个exists条件加入must数组后,原有的terms筛选逻辑保持不变,同时新增了字段存在性校验。

内容的提问来源于stack exchange,提问作者Anon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 11:05:18