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
相关产品推荐
相关产品推荐

