Агрегирование по результатам инференса
Родительская агрегация на основе конвейера, которая загружает предварительно обученную модель и выполняет инференс на собранных результатах полей из родительской агрегации.
Для использования агрегации по результатам инференса необходимы те же права доступа, что и для использования API get trained models API.
Синтаксис
Агрегация inference выглядит следующим образом:
{
"inference": {
"model_id": "a_model_for_inference",
"inference_config": {
"regression_config": {
"num_top_feature_importance_values": 2
}
},
"buckets_path": {
"avg_cost": "avg_agg",
"max_cost": "max_agg"
}
}
} | Уникальный идентификатор или псевдоним предварительно обученной модели. | |
| Необязательная конфигурация инференса, которая переопределяет значения по умолчанию для модели. | |
| Сопоставление значения |
Таблица 63. inference Параметры
| Имя параметра | Описание | Обязательно | Значение по умолчанию |
|---|---|---|---|
| Идентификатор или псевдоним предварительно обученной модели. | Обязательно | - |
| Содержит тип инференса и его параметры. Существуют два типа: | Необязательно | - |
| Определяет пути к входным агрегациям и сопоставляет имена агрегаций с именами полей, ожидаемых моделью. Подробнее см. | Обязательно | - |
Параметры конфигурации для моделей инференса
Параметр inference_config необязательный и обычно не требуется, так как предварительно обученные модели поставляются с разумными значениями по умолчанию. В контексте агрегаций некоторые параметры можно переопределить для каждого типа модели.
Параметры конфигурации для регрессионных моделей
-
num_top_feature_importance_values - (Необязательно, целое число) Указывает максимальное количество значений важности признаков на документ. По умолчанию равно нулю, и расчет важности признаков не выполняется.
Параметры конфигурации для классификационных моделей
-
num_top_classes - (Необязательно, целое число) Указывает количество вершинных предсказаний класса для возврата. По умолчанию равно 0.
-
num_top_feature_importance_values - (Необязательно, целое число) Указывает максимальное количество значений важности признаков на документ. По умолчанию равно 0, что означает отсутствие расчета важности признаков.
-
prediction_field_type - (Необязательно, строка) Указывает тип предсказанного поля для записи. Допустимые значения:
string,number,boolean. При указанииboolean,1.0преобразуется вtrue, а0.0вfalse.
Пример
Следующий фрагмент агрегирует веб-лог по client_ip и извлекает ряд признаков с помощью метрик и вложенных агрегаций для входных данных агрегации инференса, настроенной с моделью, обученной для распознавания подозрительных IP-адресов клиентов:
resp = client.search(
index="kibana_sample_data_logs",
size=0,
aggs={
"client_ip": {
"composite": {
"sources": [
{
"client_ip": {
"terms": {
"field": "clientip"
}
}
}
]
},
"aggs": {
"url_dc": {
"cardinality": {
"field": "url.keyword"
}
},
"bytes_sum": {
"sum": {
"field": "bytes"
}
},
"geo_src_dc": {
"cardinality": {
"field": "geo.src"
}
},
"geo_dest_dc": {
"cardinality": {
"field": "geo.dest"
}
},
"responses_total": {
"value_count": {
"field": "timestamp"
}
},
"success": {
"filter": {
"term": {
"response": "200"
}
}
},
"error404": {
"filter": {
"term": {
"response": "404"
}
}
},
"error503": {
"filter": {
"term": {
"response": "503"
}
}
},
"malicious_client_ip": {
"inference": {
"model_id": "malicious_clients_model",
"buckets_path": {
"response_count": "responses_total",
"url_dc": "url_dc",
"bytes_sum": "bytes_sum",
"geo_src_dc": "geo_src_dc",
"geo_dest_dc": "geo_dest_dc",
"success": "success._count",
"error404": "error404._count",
"error503": "error503._count"
}
}
}
}
}
},
)
print(resp) response = client.search(
index: 'kibana_sample_data_logs',
body: {
size: 0,
aggregations: {
client_ip: {
composite: {
sources: [
{
client_ip: {
terms: {
field: 'clientip'
}
}
}
]
},
aggregations: {
url_dc: {
cardinality: {
field: 'url.keyword'
}
},
bytes_sum: {
sum: {
field: 'bytes'
}
},
geo_src_dc: {
cardinality: {
field: 'geo.src'
}
},
geo_dest_dc: {
cardinality: {
field: 'geo.dest'
}
},
responses_total: {
value_count: {
field: 'timestamp'
}
},
success: {
filter: {
term: {
response: '200'
}
}
},
"error404": {
filter: {
term: {
response: '404'
}
}
},
"error503": {
filter: {
term: {
response: '503'
}
}
},
malicious_client_ip: {
inference: {
model_id: 'malicious_clients_model',
buckets_path: {
response_count: 'responses_total',
url_dc: 'url_dc',
bytes_sum: 'bytes_sum',
geo_src_dc: 'geo_src_dc',
geo_dest_dc: 'geo_dest_dc',
success: 'success._count',
"error404": 'error404._count',
"error503": 'error503._count'
}
}
}
}
}
}
}
)
puts response const response = await client.search({
index: "kibana_sample_data_logs",
size: 0,
aggs: {
client_ip: {
composite: {
sources: [
{
client_ip: {
terms: {
field: "clientip",
},
},
},
],
},
aggs: {
url_dc: {
cardinality: {
field: "url.keyword",
},
},
bytes_sum: {
sum: {
field: "bytes",
},
},
geo_src_dc: {
cardinality: {
field: "geo.src",
},
},
geo_dest_dc: {
cardinality: {
field: "geo.dest",
},
},
responses_total: {
value_count: {
field: "timestamp",
},
},
success: {
filter: {
term: {
response: "200",
},
},
},
error404: {
filter: {
term: {
response: "404",
},
},
},
error503: {
filter: {
term: {
response: "503",
},
},
},
malicious_client_ip: {
inference: {
model_id: "malicious_clients_model",
buckets_path: {
response_count: "responses_total",
url_dc: "url_dc",
bytes_sum: "bytes_sum",
geo_src_dc: "geo_src_dc",
geo_dest_dc: "geo_dest_dc",
success: "success._count",
error404: "error404._count",
error503: "error503._count",
},
},
},
},
},
},
});
console.log(response); GET kibana_sample_data_logs/_search
{
"size": 0,
"aggs": {
"client_ip": {
"composite": {
"sources": [
{
"client_ip": {
"terms": {
"field": "clientip"
}
}
}
]
},
"aggs": {
"url_dc": {
"cardinality": {
"field": "url.keyword"
}
},
"bytes_sum": {
"sum": {
"field": "bytes"
}
},
"geo_src_dc": {
"cardinality": {
"field": "geo.src"
}
},
"geo_dest_dc": {
"cardinality": {
"field": "geo.dest"
}
},
"responses_total": {
"value_count": {
"field": "timestamp"
}
},
"success": {
"filter": {
"term": {
"response": "200"
}
}
},
"error404": {
"filter": {
"term": {
"response": "404"
}
}
},
"error503": {
"filter": {
"term": {
"response": "503"
}
}
},
"malicious_client_ip": {
"inference": {
"model_id": "malicious_clients_model",
"buckets_path": {
"response_count": "responses_total",
"url_dc": "url_dc",
"bytes_sum": "bytes_sum",
"geo_src_dc": "geo_src_dc",
"geo_dest_dc": "geo_dest_dc",
"success": "success._count",
"error404": "error404._count",
"error503": "error503._count"
}
}
}
}
}
}
} | Составная агрегация, которая агрегирует данные по | |
| Ряд метрик и вложенных агрегаций. | |
| Агрегация по результатам инференса, которая указывает на предварительно обученную модель и сопоставляет имена агрегаций с входными полями модели. |
© 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/search-aggregations-pipeline-inference-bucket-aggregation.html