Тип поля агрегированных метрик
Хранит предварительно агрегированные числовые значения для метрических агрегаций. Поле типа aggregate_metric_double — это объект, содержащий одно или несколько из следующих подполей метрик: min, max, sum и value_count.
При выполнении определенных метрических агрегаций на поле типа aggregate_metric_double агрегация использует значения соответствующего подполя. Например, агрегация min для поля типа aggregate_metric_double возвращает минимальное значение всех подполей min.
Поле типа aggregate_metric_double хранит единственное числовое значение документа для каждого подполя метрики. Массивы значений не поддерживаются. Значения min, max и sum являются double числами. value_count — это положительное long число.
resp = client.indices.create(
index="my-index",
mappings={
"properties": {
"my-agg-metric-field": {
"type": "aggregate_metric_double",
"metrics": [
"min",
"max",
"sum",
"value_count"
],
"default_metric": "max"
}
}
},
)
print(resp) response = client.indices.create(
index: 'my-index',
body: {
mappings: {
properties: {
"my-agg-metric-field": {
type: 'aggregate_metric_double',
metrics: [
'min',
'max',
'sum',
'value_count'
],
default_metric: 'max'
}
}
}
}
)
puts response const response = await client.indices.create({
index: "my-index",
mappings: {
properties: {
"my-agg-metric-field": {
type: "aggregate_metric_double",
metrics: ["min", "max", "sum", "value_count"],
default_metric: "max",
},
},
},
});
console.log(response); PUT my-index
{
"mappings": {
"properties": {
"my-agg-metric-field": {
"type": "aggregate_metric_double",
"metrics": [ "min", "max", "sum", "value_count" ],
"default_metric": "max"
}
}
}
} Параметры для полей aggregate_metric_double
-
metrics - (Обязательно, массив строк) Массив подполей метрик для хранения. Каждое значение соответствует метрической агрегации. Допустимые значения:
min,max,sumиvalue_count. Необходимо указать хотя бы одно значение. -
default_metric - (Обязательно, строка) Поле метрики по умолчанию для использования в запросах, скриптах и агрегациях, не использующих подполе. Должно быть значением из массива
metrics. -
time_series_metric -
(Необязательно, строка) Отмечает поле как метрику временного ряда. Значение — тип метрики. Этот параметр нельзя обновить для существующих полей.
Допустимые значения
time_series_metricдля полейaggregate_metric_double-
gauge - Метрика, представляющая единственное числовое значение, которое может произвольно увеличиваться или уменьшаться. Например, температура или доступное дисковое пространство.
-
null(По умолчанию) - Не является метрикой временного ряда.
-
Использование
Мы разработали поля aggregate_metric_double для использования с следующими агрегациями:
- Агрегация
minвозвращает минимальное значение всех подполейmin. - Агрегация
maxвозвращает максимальное значение всех подполейmax. - Агрегация
sumвозвращает сумму значений всех подполейsum. - Агрегация
value_countвозвращает сумму значений всех подполейvalue_count. - Агрегация
avg. Нет подполяavg; результат агрегацииavgвычисляется с использованием метрикsumиvalue_count. Для выполнения агрегацииavgполе должно содержать оба подполя метрикиsumиvalue_count.
Выполнение любой другой агрегации на поле aggregate_metric_double завершится ошибкой «неподдерживаемая агрегация».
Наконец, поле aggregate_metric_double поддерживает следующие запросы, для которых оно ведет себя как double, делегируя свое поведение своему подполю default_metric:
Примеры
Следующий запрос API создания индекса создает индекс с полем aggregate_metric_double под названием agg_metric. В запросе задается max в качестве default_metric поля.
resp = client.indices.create(
index="stats-index",
mappings={
"properties": {
"agg_metric": {
"type": "aggregate_metric_double",
"metrics": [
"min",
"max",
"sum",
"value_count"
],
"default_metric": "max"
}
}
},
)
print(resp) response = client.indices.create(
index: 'stats-index',
body: {
mappings: {
properties: {
agg_metric: {
type: 'aggregate_metric_double',
metrics: [
'min',
'max',
'sum',
'value_count'
],
default_metric: 'max'
}
}
}
}
)
puts response const response = await client.indices.create({
index: "stats-index",
mappings: {
properties: {
agg_metric: {
type: "aggregate_metric_double",
metrics: ["min", "max", "sum", "value_count"],
default_metric: "max",
},
},
},
});
console.log(response); PUT stats-index
{
"mappings": {
"properties": {
"agg_metric": {
"type": "aggregate_metric_double",
"metrics": [ "min", "max", "sum", "value_count" ],
"default_metric": "max"
}
}
}
} Следующий запрос API индексирования добавляет документы с предварительно агрегированными данными в поле agg_metric.
resp = client.index(
index="stats-index",
id="1",
document={
"agg_metric": {
"min": -302.5,
"max": 702.3,
"sum": 200,
"value_count": 25
}
},
)
print(resp)
resp1 = client.index(
index="stats-index",
id="2",
document={
"agg_metric": {
"min": -93,
"max": 1702.3,
"sum": 300,
"value_count": 25
}
},
)
print(resp1) response = client.index(
index: 'stats-index',
id: 1,
body: {
agg_metric: {
min: -302.5,
max: 702.3,
sum: 200,
value_count: 25
}
}
)
puts response
response = client.index(
index: 'stats-index',
id: 2,
body: {
agg_metric: {
min: -93,
max: 1702.3,
sum: 300,
value_count: 25
}
}
)
puts response const response = await client.index({
index: "stats-index",
id: 1,
document: {
agg_metric: {
min: -302.5,
max: 702.3,
sum: 200,
value_count: 25,
},
},
});
console.log(response);
const response1 = await client.index({
index: "stats-index",
id: 2,
document: {
agg_metric: {
min: -93,
max: 1702.3,
sum: 300,
value_count: 25,
},
},
});
console.log(response1); PUT stats-index/_doc/1
{
"agg_metric": {
"min": -302.50,
"max": 702.30,
"sum": 200.0,
"value_count": 25
}
}
PUT stats-index/_doc/2
{
"agg_metric": {
"min": -93.00,
"max": 1702.30,
"sum": 300.00,
"value_count": 25
}
} Вы можете выполнить агрегации min, max, sum, value_count и avg на поле типа agg_metric.
resp = client.search(
index="stats-index",
size="0",
aggs={
"metric_min": {
"min": {
"field": "agg_metric"
}
},
"metric_max": {
"max": {
"field": "agg_metric"
}
},
"metric_value_count": {
"value_count": {
"field": "agg_metric"
}
},
"metric_sum": {
"sum": {
"field": "agg_metric"
}
},
"metric_avg": {
"avg": {
"field": "agg_metric"
}
}
},
)
print(resp) response = client.search(
index: 'stats-index',
size: 0,
body: {
aggregations: {
metric_min: {
min: {
field: 'agg_metric'
}
},
metric_max: {
max: {
field: 'agg_metric'
}
},
metric_value_count: {
value_count: {
field: 'agg_metric'
}
},
metric_sum: {
sum: {
field: 'agg_metric'
}
},
metric_avg: {
avg: {
field: 'agg_metric'
}
}
}
}
)
puts response const response = await client.search({
index: "stats-index",
size: 0,
aggs: {
metric_min: {
min: {
field: "agg_metric",
},
},
metric_max: {
max: {
field: "agg_metric",
},
},
metric_value_count: {
value_count: {
field: "agg_metric",
},
},
metric_sum: {
sum: {
field: "agg_metric",
},
},
metric_avg: {
avg: {
field: "agg_metric",
},
},
},
});
console.log(response); POST stats-index/_search?size=0
{
"aggs": {
"metric_min": { "min": { "field": "agg_metric" } },
"metric_max": { "max": { "field": "agg_metric" } },
"metric_value_count": { "value_count": { "field": "agg_metric" } },
"metric_sum": { "sum": { "field": "agg_metric" } },
"metric_avg": { "avg": { "field": "agg_metric" } }
}
} Результаты агрегаций основаны на значениях соответствующих подполей метрик.
{
...
"aggregations": {
"metric_min": {
"value": -302.5
},
"metric_max": {
"value": 1702.3
},
"metric_value_count": {
"value": 50
},
"metric_sum": {
"value": 500.0
},
"metric_avg": {
"value": 10.0
}
}
} Запросы к полю aggregate_metric_double используют значение default_metric.
resp = client.search(
index="stats-index",
query={
"term": {
"agg_metric": {
"value": 702.3
}
}
},
)
print(resp) response = client.search(
index: 'stats-index',
body: {
query: {
term: {
agg_metric: {
value: 702.3
}
}
}
}
)
puts response const response = await client.search({
index: "stats-index",
query: {
term: {
agg_metric: {
value: 702.3,
},
},
},
});
console.log(response); GET stats-index/_search
{
"query": {
"term": {
"agg_metric": {
"value": 702.30
}
}
}
} Поиск возвращает следующий результат. Значение поля default_metric, max, соответствует значению запроса.
{
...
"hits": {
"total": {
"value": 1,
"relation": "eq"
},
"max_score": 1.0,
"hits": [
{
"_index": "stats-index",
"_id": "1",
"_score": 1.0,
"_source": {
"agg_metric": {
"min": -302.5,
"max": 702.3,
"sum": 200.0,
"value_count": 25
}
}
}
]
}
} Синтетическая метрика _source
Синтетическая метрика _source доступна только для индексов TSDB (индексы, для которых параметр index.mode установлен на time_series). Для других индексов синтетическая метрика _source находится на стадии технического предварительного просмотра. Функции на стадии технического предварительного просмотра могут быть изменены или удалены в будущих выпусках. Elastic будет работать над устранением проблем, но функции на стадии технического предварительного просмотра не подпадают под SLA поддержки официальных функций GA.
Например:
resp = client.indices.create(
index="idx",
settings={
"index": {
"mapping": {
"source": {
"mode": "synthetic"
}
}
}
},
mappings={
"properties": {
"agg_metric": {
"type": "aggregate_metric_double",
"metrics": [
"min",
"max",
"sum",
"value_count"
],
"default_metric": "max"
}
}
},
)
print(resp)
resp1 = client.index(
index="idx",
id="1",
document={
"agg_metric": {
"min": -302.5,
"max": 702.3,
"sum": 200,
"value_count": 25
}
},
)
print(resp1) const response = await client.indices.create({
index: "idx",
settings: {
index: {
mapping: {
source: {
mode: "synthetic",
},
},
},
},
mappings: {
properties: {
agg_metric: {
type: "aggregate_metric_double",
metrics: ["min", "max", "sum", "value_count"],
default_metric: "max",
},
},
},
});
console.log(response);
const response1 = await client.index({
index: "idx",
id: 1,
document: {
agg_metric: {
min: -302.5,
max: 702.3,
sum: 200,
value_count: 25,
},
},
});
console.log(response1); PUT idx
{
"settings": {
"index": {
"mapping": {
"source": {
"mode": "synthetic"
}
}
}
},
"mappings": {
"properties": {
"agg_metric": {
"type": "aggregate_metric_double",
"metrics": [ "min", "max", "sum", "value_count" ],
"default_metric": "max"
}
}
}
}
PUT idx/_doc/1
{
"agg_metric": {
"min": -302.50,
"max": 702.30,
"sum": 200.0,
"value_count": 25
}
} Преобразуется в:
{
"agg_metric": {
"min": -302.50,
"max": 702.30,
"sum": 200.0,
"value_count": 25
}
}
© 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/8.17/aggregate-metric-double.html