如何在Elasticsearch的sum聚合中跳过指定值-99999999999999
Elasticsearch聚合排除特定值解决方案
完全可以实现这个需求,给你两种常用的解决方法:
方法一:使用过滤聚合先排除目标文档
先通过filter聚合筛选掉PriceSavings等于-99999999999999的文档,再对剩余文档做sum计算:
"aggs": { "filtered_savings": { "filter": { "bool": { "must_not": [ {"term": {"PriceSavings": -99999999999999}} ] } }, "aggs": { "sum_savings": { "sum": { "field": "PriceSavings" } } } } }
方法二:在sum聚合中用脚本跳过特定值
直接在sum的脚本逻辑里判断,遇到目标值时返回0(不参与求和),否则返回原字段值:
"aggs": { "sum_savings": { "sum": { "script": { "source": "doc['PriceSavings'].value == -99999999999999 ? 0 : doc['PriceSavings'].value" } } } }
两种方法都能满足需求,过滤聚合的逻辑更直观,脚本方式则更简洁。如果PriceSavings是数值类型,term查询可以精准匹配目标值。
内容的提问来源于stack exchange,提问作者Daniel Ortiz
相关产品推荐
相关产品推荐

