我正在使用elasticsearch做分析,发现在进行聚合时,如果一个桶的所有元素都是空值,则总和结果为0,但avg结果为null。
{
"size" : 0,
"query" : {
"bool" : {
"must" : {
"bool" : {
"must" : {
"bool" : {
"should" : [ {
"term" : {
"2219" : "AAA"
}
}, {
"term" : {
"2219" : "BBB"
}
}, {
"term" : {
"2219" : "CCC"
}
}, {
"term" : {
"2219" : "DDD"
}
} ]
}
}
}
}
}
},
"explain" : false,
"aggregations" : {
"2224" : {
"terms" : {
"field" : "2224",
"missing" : "null",
"size" : 2000
},
"aggregations" : {
"2219" : {
"terms" : {
"field" : "2219",
"missing" : "null",
"size" : 2000
},
"aggregations" : {
"a" : {
"avg" : {
"field" : "2255"
}
},
"count" : {
"value_count" : {
"field" : "1982"
}
}
}
}
}
}
}
}
结果将是
...
{
"2219": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": "DDD",
"doc_count": 1,
"a": {
"value": null
}
}
]
},
"key": "rock",
"doc_count": 1
}
...
“a”的结果为空。
但如果我改为总和,则“a”的结果为0。
奇怪的不同行为。
答案 0 :(得分:0)
ES github中存在类似的问题:https://github.com/elastic/elasticsearch/issues/9745
当ES找到0个实体时,null 被认为是AVG聚合的正确值。