English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Агрегация Elasticsearch

Аггрегационная рамка собирает все данные, выбранные поисковым запросом, и состоит из множества строительных блоков, что помогает создавать сложные摘要 данных. Основная структура аггрегации показана ниже-

"aggregations" : {
   "" : {
      "" : {
      }
 
      ["meta" : { [] } ]?
      ["aggregations" : { []+ } ]?
   }
   ["" : { ... }]*
}

Аггрегации имеют различные типы, каждый из которых имеет свою цель. В этой главе мы подробно рассмотрим эти вопросы.

Аггрегация индикаторов

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

Матрица значений может быть как одномерной (например, средняя аггрегация), так и многомерной (например, статистические данные).

Аггрегация среднего значения

Эта аггрегация предназначена для получения среднего значения любого числового поля в аггрегационных документах. Например,

POST /schools/_search
{
   "aggs":{
      "avg_fees":{"avg":{"field":"fees"}}
   }
}

При выполнении вышеуказанного кода мы получили следующие результаты-

{
   "took": 41
   "timed_out": false,
   "_shards": {
      "total": 1,
      "successful" : 1,
      "skipped" : 0,
      "failed" : 0
   }
   "hits" : {
      "total" : {
         "value" : 2,
         "relation" : "eq"
      }
      "max_score": 1.0,
      "hits": [
         {
            "_index": "schools",
            "_type": "school",
            "_id": "5",
            "_score": 1.0,
            "_source": {
               "name": "Central School",
               "description": "CBSE Affiliation",
               "street": "Nagan",
               "city": "paprola",
               "state": "HP",
               "zip": "176115",
               "location": [
                  31.8955385,
                  76.8380405
               ],
            "fees": 2200,
            "tags": [
               "Senior Secondary",
               "beautiful campus"
            ],
            "rating": "3.3"
         }
      }
      {
         "_index": "schools",
         "_type": "school",
         "_id": "4",
         "_score": 1.0,
         "_source": {
            "name": "City Best School",
            "description": "ICSE",
            "street": "West End",
            "city": "Meerut",
            "state": "UP",
            "zip": "250002",
            "location": [
               28.9926174,
               77.692485
            ],
            "fees": 3500,
            "tags": [
               "fully computerized"
            ],
            "rating": "4.5"
         }
      }
   ]
 }
   "aggregations" : {
      "avg_fees": {
         "value" : 2850.0
      }
   }
}

Агрегация基数

Этот агрегат предоставляет счетчик различных значений в определенном поле.

POST /schools/_search?size=0
{
   "aggs":{
      "distinct_name_count":{"cardinality":{"field":"fees"}}
   }
}

При выполнении вышеуказанного кода мы получили следующие результаты-

{
   "took": 2,
   "timed_out": false,
   "_shards": {
      "total": 1,
      "successful" : 1,
      "skipped" : 0,
      "failed" : 0
   }
   "hits" : {
      "total" : {
         "value" : 2,
         "relation" : "eq"
      }
      "max_score" : null,
      "hits" : [ ]
   }
   "aggregations" : {
      "distinct_name_count": {
         "value": 2
      }
   }
}

Примечание Значение основы равно 2, так как у платы есть два разных значения.

Агрегация расширения статистики

Этот агрегат будет генерировать все статистические данные о специфических числовых полях в документе агрегации.

POST /schools/_search?size=0
{
   "aggs": {
      "fees_stats": { "extended_stats": { "field": "fees" } } }
   }
}

При выполнении вышеуказанного кода мы получили следующие результаты-

{
   "took": 8,
   "timed_out": false,
   "_shards": {
      "total": 1,
      "successful" : 1,
      "skipped" : 0,
      "failed" : 0
   }
   "hits" : {
      "total" : {
         "value" : 2,
         "relation" : "eq"
      }
      "max_score" : null,
      "hits" : [ ]
   }
   "aggregations" : {
      "fees_stats": {
         "count": 2,
         "min": 2200.0,
         "max": 3500.0,
         "avg": 2850.0,
         "sum": 5700.0,
         "sum_of_squares": 1.709E7,
         "variance": 422500.0
         "std_deviation": 650.0,
         "std_deviation_bounds": {
            "upper": 4150.0,
            "lower": 1550.0
         }
      }
   }
}

Максимальный агрегат

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

POST /schools/_search?size=0
{
   "aggs": {
   "max_fees": { "max": { "field": "fees" } }
   }
}

При выполнении вышеуказанного кода мы получили следующие результаты-

{
   "took": 16,
   "timed_out": false,
   "_shards": {
      "total": 1,
      "successful" : 1,
      "skipped" : 0,
      "failed" : 0
   }
  "hits" : {
      "total" : {
         "value" : 2,
         "relation" : "eq"
      }
      "max_score" : null,
      "hits" : [ ]
   }
   "aggregations" : {
      "max_fees": {
         "value": 3500.0
      }
   }
}

Минимальный агрегат

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

POST /schools/_search?size=0
{
   "aggs": {
      "min_fees": { "min": { "field": "fees" } }
   }
}

При выполнении вышеуказанного кода мы получили следующие результаты-

{
   "took": 2,
   "timed_out": false,
   "_shards": {
      "total": 1,
      "successful" : 1,
      "skipped" : 0,
      "failed" : 0
   }
   "hits" : {
      "total" : {
         "value" : 2,
         "relation" : "eq"
      }
      "max_score" : null,
      "hits" : [ ]
   }
  "aggregations" : {
      "min_fees" : {
         "value": 2200.0
      }
   }
}

Общий агрегат

Эта агрегация вычисляет сумму значений определенного числового поля в документах агрегации.

POST /schools/_search?size=0
{
   "aggs": {
      "total_fees": { "sum": { "field": "fees" } } }
   }
}

При выполнении вышеуказанного кода мы получили следующие результаты-

{
   "took": 8,
   "timed_out": false,
   "_shards": {
      "total": 1,
      "successful" : 1,
      "skipped" : 0,
      "failed" : 0
   }
   "hits" : {
      "total" : {
         "value" : 2,
         "relation" : "eq"
      }
      "max_score" : null,
      "hits" : [ ]
   }
   "aggregations" : {
      "total_fees": {
         "value": 5700.0
      }
   }
}

В некоторых特殊情况还有其他一些度量标准聚合,例如地理边界聚合和地理质心聚合,以实现地理位置。

Статистическая агрегация

Агрегация многоуровневых мер, которая позволяет вычислять статистическую информацию на основе числовых значений, извлеченных из документов агрегации.

POST /schools/_search?size=0
{
   "aggs": {
      "grades_stats": { "stats": { "field": "fees" } } }
   }
}

При выполнении вышеуказанного кода мы получили следующие результаты-

{
   "took": 2,
   "timed_out": false,
   "_shards": {
      "total": 1,
      "successful" : 1,
      "skipped" : 0,
      "failed" : 0
   }
   "hits" : {
      "total" : {
         "value" : 2,
         "relation" : "eq"
      }
      "max_score" : null,
      "hits" : [ ]
   }
   "aggregations" : {
      "grades_stats": {
         "count": 2,
         "min": 2200.0,
         "max": 3500.0,
         "avg": 2850.0,
         "sum": 5700.0
      }
   }
}

Метаданные агрегации

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

POST /schools/_search?size=0
{
   "aggs": {
      "min_fees": { "avg": { "field": "fees" } },
         "meta": {
            "dsc": "Низкие платы за этот год"
         }
      }
   }
}

При выполнении вышеуказанного кода мы получили следующие результаты-

{
   "took": 0,
   "timed_out": false,
   "_shards": {
      "total": 1,
      "successful" : 1,
      "skipped" : 0,
      "failed" : 0
   }
   "hits" : {
      "total" : {
         "value" : 2,
         "relation" : "eq"
      }
      "max_score" : null,
      "hits" : [ ]
   }
   "aggregations" : {
      "min_fees" : {
         "meta" : {
            "dsc" : "Низшие траты в этом году"
         }
         "value" : 2850.0
      }
   }
}