Поле _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
} | Поле |
Если мы выполним следующую агрегацию по категориям над 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