Как получить максимальное или среднее значение из Bucket Aggregation

Как я могу получить среднее или максимальное количество документов из своих корзин.

Есть много примеров того, как это сделать с числовыми полями, но мне нужно получить количество различных устройств.

Мой запрос:

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
            },
...

person gdevereg    schedule 27.01.2016    source источник


Ответы (1)


Terms aggregation по умолчанию сортирует корзину в порядке убывания doc_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"
        }
    }
   }
 }

Затем разделите оба результата, чтобы получить среднее значение.

person Richa    schedule 27.01.2016
comment
Хорошо, это логично, но как насчет AVG? - person gdevereg; 27.01.2016
comment
@gdevereg Вы хотите получить средний doc_count, что означает (sum_of_all_doc_count/number_of_buckets)?. - person Richa; 27.01.2016
comment
Да. Это именно то, что я ищу. - person gdevereg; 28.01.2016