Рассмотрим один из 4 методов агрегации в elasticsearch. Агрегация метрик возвращает вычисленное значение из набора документов. Для понятия сути агрегации метрик рассмотрим несколько примеров применения:

  • Например расчитать сумму байт всех доументов в index
  • Расчитать серднее время ответа
  • Расчитать минимальное время ответа
  • Максимальное количество байт переданное в ответе

Aggs

Собствено aggs и используется для агрегации метрик. Можно выделить 2 важных поля в запросе при использовании aggs. Это aggregation name ( имя, котрое будет выведенно в результатах запроса ) и AGG_TYPE ( тип агрегации ).

GET INDEX/_search {
  "aggs": {
    "AGGREGATION_NAME": {
	  "AGG_TYPE": {
	    "sum": {
		  "field": "FIELD1"
		}  
	  }
	}
  }
}  

Результаты агрегации (Aggregation Results)

В результате выполнения запроса с агрегацией добавится секция aggregations, в которой и будет результат запроса.

...
"aggregations": {
  "AGGREGATION_NAME": {
    "value": 10
  }
}

Также в выоде пудут 10 первых документов, и если вы хотите исключить их из вывода, например для ускорения запросы можно выставить size в 0. Про size можно почитать тут.

GET INDEX/_search {
  "size": 0,
  "aggs": {
    "AGGREGATION_NAME": {
	  "sum": {
		"field": "FIELD1"
	  }
	}
  }
}  

Естественно можно и даже нужно использовать с query.

GET INDEX/_search {
  "size": 0, 
  "query": {
    "match": {
      "FIELD1": "TEXT1"
    }
  },
  "aggs": {
    "AGGREGATION_NAME": {
	  "sum": {
		"field": "FIELD1"
	  }
	}
  }
}  

Для вычисления медианы можно использовать percentiles.

GET INDEX/_search
{
  "size": 0, 
  "query": {
    "match": {
      "FIELD1": "TEXT1"
    }
  },
  "aggs": {
    "my_agg": {
      "percentiles": {
        "field": "FIELD1"
        , "percents": [
          50
        ]
      }
    }
  }
}

cardinality

Чтобы расчитать количество уникальных значений поля можно восспользоваться cardinality. Можно использовать например для подсчета уникальных пользователей.

GET INDEX//_search
{
  "aggs": {
    "my_agg": {
      "cardinality": {
        "field": "FIELD1.keyword"
      }
    }
  }
}

Таблица типов агрегаций (AGG_TYPE)

Имя Функция
sum суммирование
min минимальное значение
max максимальное значение
avg серднее значение
percentiles перцентиль
cardinality вычисляет количество различных значений для заданного поля
boxplot вычисляет коробчатую диаграмму числовых значений
geo_bounds  
geo_centroid  
matrix_stats  
rate вычисляет курс документов или поля в каждом сегменте
date_histogram количество документов разбитое по датам
histogram похоже на агрегирование date_histogram, за исключением того, что оно может применяться к любому числовому полю