Spec-Zone.ru › Elasticsearch 7
›Elasticsearch Guide [7.17] ›Отображение ›Поля метаданных

Поле _doc_count

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

Хотя этот простой подход эффективен при вычислении агрегаций по отдельным документам, он неточно отображает документы, которые хранят предварительно агрегированные данные (например, поля histogram или aggregate_metric_double), потому что одно сводное поле может представлять несколько документов.

Чтобы обеспечить корректное вычисление количества документов при работе с предварительно агрегированными данными, мы ввели тип поля метаданных с именем _doc_count. _doc_count всегда должен быть положительным целым числом, представляющим количество документов, агрегированных в одном сводном поле.

Когда к документу добавляется поле _doc_count, все агрегации по корзинам будут учитывать его значение и увеличивать количество в корзине doc_count на значение поля. Если документ не содержит поля _doc_count, то значение _doc_count = 1 подразумевается по умолчанию.

  • Поле _doc_count может хранить только одно положительное целое число на документ. Вложенные массивы не допускаются.
  • Если документ не содержит полей _doc_count, агрегаторы будут увеличивать счетчик на 1, что является поведением по умолчанию.

Пример

Следующий запрос API создания индекса создает новый индекс со следующими отображениями полей:

  • my_histogram, поле histogram, используемое для хранения данных перцентилей
  • my_text, поле keyword, используемое для хранения заголовка гистограммы
PUT my_index
{
  "mappings" : {
    "properties" : {
      "my_histogram" : {
        "type" : "histogram"
      },
      "my_text" : {
        "type" : "keyword"
      }
    }
  }
}

Следующие запросы API индексирования хранят предварительно агрегированные данные для двух гистограмм: histogram_1 и histogram_2.

PUT my_index/_doc/1
{
  "my_text" : "histogram_1",
  "my_histogram" : {
      "values" : [0.1, 0.2, 0.3, 0.4, 0.5],
      "counts" : [3, 7, 23, 12, 6]
   },
  "_doc_count": 45 
}

PUT my_index/_doc/2
{
  "my_text" : "histogram_2",
  "my_histogram" : {
      "values" : [0.1, 0.25, 0.35, 0.4, 0.45, 0.5],
      "counts" : [8, 17, 8, 7, 6, 2]
   },
  "_doc_count": 62 
}

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

Если мы выполним следующую агрегацию по категориям над my_index:

GET /_search
{
    "aggs" : {
        "histogram_titles" : {
            "terms" : { "field" : "my_text" }
        }
    }
}

Мы получим следующий ответ:

{
    ...
    "aggregations" : {
        "histogram_titles" : {
            "doc_count_error_upper_bound": 0,
            "sum_other_doc_count": 0,
            "buckets" : [
                {
                    "key" : "histogram_2",
                    "doc_count" : 62
                },
                {
                    "key" : "histogram_1",
                    "doc_count" : 45
                }
            ]
        }
    }
}

© 2023-2025 Elasticsearch
As of September 2024, Elasticsearch is available under a choice of three licenses: the Server Side Public License (SSPL), the Elastic License, or the AGPLv3 (OSI approved).
Elasticsearch and the Elasticsearch logo are trademarks of Elasticsearch B.V., registered in the U.S. and in other countries.
https://www.elastic.co/guide/en/elasticsearch/reference/7.17/mapping-doc-count-field.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API