Процессор сценариев
Выполняет встроенный или сохранённый скрипт над поступающими документами. Скрипт выполняется в контексте ingest.
Процессор сценариев использует кеш сценариев, чтобы избежать повторной компиляции сценария для каждого входящего документа. Для повышения производительности, убедитесь, что кеш сценариев правильно настроен перед использованием процессора сценариев в рабочей среде.
Таблица 35. Параметры сценария
| Имя | Обязательно | По умолчанию | Описание |
|---|---|---|---|
| нет | "painless" | |
| нет | - | Идентификатор сохранённого сценария. Если параметр |
| нет | - | Встроенный сценарий. Если параметр |
| нет | - | Объект, содержащий параметры для сценария. |
| нет | - | Описание процессора. Полезно для описания цели процессора или его конфигурации. |
| нет | - | Условное выполнение процессора. См. Условное выполнение процессора. |
| нет |
| Игнорировать ошибки для процессора. См. Обработка ошибок в конвейере. |
| нет | - | Обработать ошибки для процессора. См. Обработка ошибок в конвейере. |
| нет | - | Идентификатор процессора. Полезен для отладки и метрик. |
Доступ к полям исходных данных
Процессор сценариев анализирует поля JSON исходных данных каждого входящего документа в набор карт, списков и примитивов. Для доступа к этим полям со скриптом Painless используйте оператор доступа к карте: ctx['my-field']. Вы также можете использовать сокращённую запись ctx.<my-field>.
Процессор сценариев не поддерживает синтаксисы ctx['_source']['my-field'] или ctx._source.<my-field>.
Следующий процессор использует сценарий Painless для извлечения поля tags из поля исходных данных env.
POST _ingest/pipeline/_simulate
{
"pipeline": {
"processors": [
{
"script": {
"description": "Extract 'tags' from 'env' field",
"lang": "painless",
"source": """
String[] envSplit = ctx['env'].splitOnToken(params['delimiter']);
ArrayList tags = new ArrayList();
tags.add(envSplit[params['position']].trim());
ctx['tags'] = tags;
""",
"params": {
"delimiter": "-",
"position": 1
}
}
}
]
},
"docs": [
{
"_source": {
"env": "es01-prod"
}
}
]
} Процессор производит:
{
"docs": [
{
"doc": {
...
"_source": {
"env": "es01-prod",
"tags": [
"prod"
]
}
}
}
]
} Доступ к полям метаданных
Вы также можете использовать процессор сценариев для доступа к полям метаданных. Следующий процессор использует сценарий Painless для установки _index входящего документа.
POST _ingest/pipeline/_simulate
{
"pipeline": {
"processors": [
{
"script": {
"description": "Set index based on `lang` field and `dataset` param",
"lang": "painless",
"source": """
ctx['_index'] = ctx['lang'] + '-' + params['dataset'];
""",
"params": {
"dataset": "catalog"
}
}
}
]
},
"docs": [
{
"_index": "generic-index",
"_source": {
"lang": "fr"
}
}
]
} Процессор изменяет _index документа с fr-catalog на generic-index.
{
"docs": [
{
"doc": {
...
"_index": "fr-catalog",
"_source": {
"lang": "fr"
}
}
}
]
}
© 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/script-processor.html