如何从Bucket Aggregation中获取max或avg

时间:2016-01-27 16:52:19

标签: elasticsearch elasticsearch-plugin

如何从我的存储桶中获取avg或max doc_count。

有很多关于如何使用数字字段的例子, 但我需要获得不同设备的nax数量。

我的查询:

POST sessions/_search
{
  "size": 0,
  "query": {
    ...
  },
  "aggs": {
    "1": {
      "terms": {
        "size" : 10,
        "order" : {
            "_count" : "desc"
        },
        "field": "deviceId"
      }
    }
  }
}

示例结果:

  "aggregations": {
      "1": {
         "doc_count_error_upper_bound": 62,
         "sum_other_doc_count": 326057,
         "buckets": [
            {
               "key": "878f6sdb0245e3d8bd",
               "doc_count": 230
            },
            {
               "key": "ee43b17fsfc00fd04f",
               "doc_count": 224
            },
            {
               "key": "bdcdeb0eeaffcfe748",
               "doc_count": 141
            },
...

1 个答案:

答案 0 :(得分:0)

默认情况下,

Terms aggregationdoc_count的递减顺序对存储桶进行排序。因此,如果你获取第一个存储桶,那将是最大的doc_count。

查询:

POST sessions/_search
{
 "size": 0,
 "query": {
 ...
},
"aggs": {
"1": {
  "terms": {
    "size" : 1,
    "order" : {
        "_count" : "desc"
    },
    "field": "deviceId"
   }
  }
 }
}

我不认为使用一个查询可以找到平均值。但是您可以使用以下查询来获得结果

索引中的

Sum Of All doc counts = Total documents

首先使用

查找总文件
GET /order/order/_count

然后使用cardinality

查找存储桶计数
{
"aggs" : {
    "device_count" : {
        "cardinality" : {
            "field" : "deviceId"
        }
    }
   }
 }

然后将结果除以得到平均值。