Elasticsearch null值聚合,sum beng 0和avg为null?

时间:2017-07-03 10:23:18

标签: elasticsearch

我正在使用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。

奇怪的不同行为。

1 个答案:

答案 0 :(得分:0)

ES github中存在类似的问题:https://github.com/elastic/elasticsearch/issues/9745

当ES找到0个实体时,

null 被认为是AVG聚合的正确值。