API для моделирования обработки данных
Выполняет обработку данных с помощью конвейеров обработки данных на наборе предоставленных документов, при необходимости с заменой определений конвейеров. Этот API предназначен для отладки или разработки конвейеров, так как он не фактически индексирует данные в Elasticsearch.
resp = client.simulate.ingest(
docs=[
{
"_index": "my-index",
"_id": "id",
"_source": {
"foo": "bar"
}
},
{
"_index": "my-index",
"_id": "id",
"_source": {
"foo": "rab"
}
}
],
pipeline_substitutions={
"my-pipeline": {
"processors": [
{
"set": {
"field": "field3",
"value": "value3"
}
}
]
}
},
component_template_substitutions={
"my-component-template": {
"template": {
"mappings": {
"dynamic": "true",
"properties": {
"field3": {
"type": "keyword"
}
}
},
"settings": {
"index": {
"default_pipeline": "my-pipeline"
}
}
}
}
},
index_template_substitutions={
"my-index-template": {
"index_patterns": [
"my-index-*"
],
"composed_of": [
"component_template_1",
"component_template_2"
]
}
},
mapping_addition={
"dynamic": "strict",
"properties": {
"foo": {
"type": "keyword"
}
}
},
)
print(resp) const response = await client.transport.request({
method: "POST",
path: "/_ingest/_simulate",
body: {
docs: [
{
_index: "my-index",
_id: "id",
_source: {
foo: "bar",
},
},
{
_index: "my-index",
_id: "id",
_source: {
foo: "rab",
},
},
],
pipeline_substitutions: {
"my-pipeline": {
processors: [
{
set: {
field: "field3",
value: "value3",
},
},
],
},
},
component_template_substitutions: {
"my-component-template": {
template: {
mappings: {
dynamic: "true",
properties: {
field3: {
type: "keyword",
},
},
},
settings: {
index: {
default_pipeline: "my-pipeline",
},
},
},
},
},
index_template_substitutions: {
"my-index-template": {
index_patterns: ["my-index-*"],
composed_of: ["component_template_1", "component_template_2"],
},
},
mapping_addition: {
dynamic: "strict",
properties: {
foo: {
type: "keyword",
},
},
},
},
});
console.log(response); POST /_ingest/_simulate
{
"docs": [
{
"_index": "my-index",
"_id": "id",
"_source": {
"foo": "bar"
}
},
{
"_index": "my-index",
"_id": "id",
"_source": {
"foo": "rab"
}
}
],
"pipeline_substitutions": {
"my-pipeline": {
"processors": [
{
"set": {
"field": "field3",
"value": "value3"
}
}
]
}
},
"component_template_substitutions": {
"my-component-template": {
"template": {
"mappings": {
"dynamic": "true",
"properties": {
"field3": {
"type": "keyword"
}
}
},
"settings": {
"index": {
"default_pipeline": "my-pipeline"
}
}
}
}
},
"index_template_substitutions": {
"my-index-template": {
"index_patterns": ["my-index-*"],
"composed_of": ["component_template_1", "component_template_2"]
}
},
"mapping_addition": {
"dynamic": "strict",
"properties": {
"foo": {
"type": "keyword"
}
}
}
} | Это заменяет существующий | |
| Это заменяет существующую | |
| Это заменяет существующий | |
| Эта схема объединяется в итоговую схему индекса непосредственно перед проверкой. Она используется только на период выполнения этого запроса. |
Запрос
POST /_ingest/_simulate
GET /_ingest/_simulate
POST /_ingest/<target>/_simulate
GET /_ingest/<target>/_simulate
Предварительные условия
- Если в Elasticsearch включены функции безопасности, вам необходимо иметь
indexилиcreateправа доступа к индексам, чтобы использовать этот API.
Описание
API для моделирования обработки данных моделирует обработку данных в индексе. Он выполняет стандартный и конечный конвейеры для данного индекса на наборе документов, предоставленных в теле запроса. Если конвейер содержит процессор перенаправления, он следует этому процессору перенаправления в новый индекс, выполняя конвейеры этого индекса таким же образом, как и при не моделируемой обработке данных. Данные не индексируются в Elasticsearch. Вместо этого преобразованный документ возвращается вместе со списком выполненных конвейеров и именем индекса, в который документ был бы индексирован, если бы это не была имитация. Преобразованный документ проверяется по отношению к схемам, которые будут применяться к этому индексу, и любые ошибки проверки сообщаются в результате.
Этот API отличается от API для моделирования конвейера тем, что вы указываете один конвейер для этого API, и он выполняет только этот один конвейер. API для моделирования конвейера более полезен для разработки одного конвейера, а API для моделирования обработки данных более полезен для устранения неполадок во взаимодействии различных конвейеров, которые применяются при обработке данных в индексе.
По умолчанию используются определения конвейеров, которые в настоящее время находятся в системе. Однако вы можете предоставить заменяющие определения конвейеров в теле запроса. Они будут использоваться вместо определений конвейеров, которые уже находятся в системе. Это можно использовать для замены существующих определений конвейеров или для создания новых. Замены конвейеров используются только в рамках этого запроса.
Параметры пути
-
<target> - (Необязательно, строка) Индекс, в который нужно смоделировать обработку данных. Это можно переопределить, указав индекс в каждом документе. Если вы предоставляете <target> в пути запроса, он используется для любых документов, которые явно не указывают аргумент индекса.
Параметры запроса
-
pipeline - (Необязательно, строка) Конвейер, который следует использовать в качестве конвейера по умолчанию. Это можно использовать для переопределения конвейера по умолчанию для индекса, в который обрабатываются данные.
Тело запроса
-
docs -
(Обязательный, массив объектов) Образцы документов для тестирования в конвейере.
Свойства объектов
docs-
_id - (Необязательный, строка) Уникальный идентификатор документа.
-
_index - (Необязательный, строка) Название индекса, в который будет добавлен документ.
-
_source - (Обязательный, объект) Тело документа в формате JSON.
-
-
pipeline_substitutions -
(Необязательный, карта строк к объектам) Карта идентификаторов конвейеров к объектам определений конвейеров.
Свойства объектов определения конвейеров
-
description - (Необязательный, строка) Описание конвейера импорта.
-
on_failure -
(Необязательный, массив объектов процессора) Процессоры, которые будут выполнены сразу после сбоя процессора.
Каждый процессор поддерживает значение уровня процессора
on_failure. Если процессор без значенияon_failureзавершается неудачно, Elasticsearch использует этот параметр на уровне конвейера в качестве резервного варианта. Процессоры в этом параметре выполняются последовательно в указанном порядке. Elasticsearch не будет пытаться выполнить оставшиеся процессоры конвейера. -
processors - (Обязательный, массив объектов процессора) Процессоры, используемые для выполнения преобразований документов перед индексированием. Процессоры выполняются последовательно в указанном порядке.
-
version -
(Необязательный, целое число) Номер версии, используемый внешними системами для отслеживания конвейеров импорта.
См. параметр
if_versionвыше, чтобы узнать, как используется атрибут версии. -
_meta - (Необязательный, объект) Дополнительные метаданные о конвейере импорта. Может содержать любые данные. Эта карта не генерируется автоматически Elasticsearch.
-
deprecated - (Необязательный, булево) Отмечает этот конвейер импорта как устаревший. Когда устаревший конвейер импорта используется как конвейер по умолчанию или конечный конвейер при создании или обновлении шаблона индекса, не помеченного как устаревший, Elasticsearch будет генерировать предупреждение об устаревании.
-
-
component_template_substitutions -
(Необязательный, карта строк к объектам) Карта имен шаблонов компонентов для замены объектами определений шаблонов компонентов.
Свойства объектов определений шаблонов компонентов
-
template -
(Обязательный, объект) Это шаблон, который должен быть применен, и может дополнительно содержать конфигурацию
mappings,settingsилиaliases.Свойства
template-
aliases -
(Необязательный, объект объектов) Псевдонимы для добавления.
Если шаблон индекса содержит объект
data_stream, это псевдонимы потоков данных. В противном случае, это псевдонимы индексов. Псевдонимы потоков данных игнорируют параметрыindex_routing,routingиsearch_routing.Свойства объектов
aliases-
<alias> -
(Обязательный, объект) Ключ — это имя псевдонима. Имена псевдонимов индексов поддерживают date math.
Тело объекта содержит параметры для псевдонима. Поддерживается пустой объект.
Свойства
<alias>-
filter - (Необязательный, объект запроса DSL) Запрос, используемый для ограничения документов, к которым может получить доступ псевдоним.
-
index_routing - (Необязательный, строка) Значение, используемое для маршрутизации операций индексирования на определенный фрагмент. Если указано, это переопределяет значение
routingдля операций индексирования. -
is_hidden - (Необязательный, логическое значение) Если
true, псевдоним скрыт. По умолчаниюfalse. Все индексы для псевдонима должны иметь одинаковое значениеis_hidden. -
is_write_index - (Необязательный, логическое значение) Если
true, индекс является индексом записи для псевдонима. По умолчаниюfalse. -
routing - (Необязательный, строка) Значение, используемое для маршрутизации операций индексирования и поиска на определенный фрагмент.
-
search_routing - (Необязательный, строка) Значение, используемое для маршрутизации операций поиска на определенный фрагмент. Если указано, это переопределяет значение
routingдля операций поиска.
-
-
-
mappings -
(Необязательный, объект картирования) Картирование полей в индексе. Если указано, это отображение может включать:
- Имена полей
- Типы данных полей
- Параметры картирования
См. Картирование.
-
settings - (Необязательный, объект настроек индекса) Параметры конфигурации индекса. См. Настройки индекса.
-
-
version - (Необязательный, целое число) Номер версии для управления шаблонами компонентов внешним образом. Это число не генерируется и не увеличивается автоматически Elasticsearch.
-
allow_auto_create - (Необязательный, логическое значение) Этот параметр переопределяет значение кластерного параметра
action.auto_create_index. Если установлено значениеtrueв шаблоне, тогда индексы могут быть автоматически созданы с помощью этого шаблона, даже если автоматическое создание индексов отключено с помощьюactions.auto_create_index. Если установлено значениеfalse, тогда индексы или потоки данных, соответствующие шаблону, всегда должны быть явно созданы и никогда не могут быть созданы автоматически. -
_meta - (Необязательный, объект) Дополнительные пользовательские метаданные о шаблоне компонента. Может содержать любые данные. Эта карта не генерируется автоматически Elasticsearch.
-
deprecated - (Необязательный, булево) Отмечает этот шаблон компонента как устаревший. Когда на шаблон компонента, помеченный как устаревший, ссылаются при создании или обновлении шаблона индекса, не помеченного как устаревший, Elasticsearch выведет предупреждение об устаревании.
-
-
index_template_substitutions
-
(Необязательно, карта строк к объектам) Карта имен шаблонов индексов для замены объектами определений шаблонов индексов.
Свойства объектов определений шаблонов индексов
-
composed_of - (Необязательно, массив строк) Упорядоченный список имён шаблонов компонентов. Шаблоны компонентов объединяются в указанном порядке, что означает, что последний указанный шаблон компонента имеет наивысший приоритет. См. создание нескольких шаблонов компонентов для примера.
-
data_stream -
(Необязательно, объект) Если этот объект включён, шаблон используется для создания потоков данных и их базовых индексов. Поддерживается пустой объект.
Потоки данных требуют соответствующего шаблона индекса с объектом
data_stream. См. создайте шаблон индекса.Свойства объекта
data_stream-
allow_custom_routing - (Необязательно, Булево) Если
true, поток данных поддерживает настраиваемое маршрутизирование. По умолчаниюfalse. -
hidden - (Необязательно, Булево) Если
true, поток данных скрыт. По умолчаниюfalse. -
index_mode -
(Необязательно, строка) Тип потока данных для создания. Допустимые значения:
null(стандартный поток данных),time_series(поток данных временных рядов) иlogsdb(поток данных журналов).index_modeшаблона устанавливаетindex.modeбазового индекса.
-
-
index_patterns -
(Обязательно, массив строк) Массив выражений с подстановкой (
*), используемых для сопоставления имён потоков данных и индексов во время создания.Elasticsearch включает несколько встроенных шаблонов индексов. Чтобы избежать коллизий имён с этими шаблонами, см. избегайте коллизий шаблонов индексов.
-
_meta - (Необязательно, объект) Необязательные пользовательские метаданные о шаблоне индекса. Может содержать любые данные. Эта карта не генерируется автоматически Elasticsearch.
-
priority - (Необязательно, целое число) Приоритет для определения приоритета шаблона индекса при создании или обновлении потока данных или индекса. Выбирается шаблон индекса с наивысшим приоритетом. Если приоритет не указан, шаблон рассматривается как имеющий приоритет 0 (наименьший приоритет). Это число не генерируется автоматически Elasticsearch.
-
template -
(Необязательно, объект) Шаблон для применения. Он может необязательно включать конфигурацию
aliases,mappingsилиsettings.Свойства объекта
template-
aliases -
(Необязательно, объект объектов) Псевдонимы для добавления.
Если шаблон индекса включает объект
data_stream, это псевдонимы потоков данных. В противном случае это псевдонимы индексов. Псевдонимы потоков данных игнорируют параметрыindex_routing,routingиsearch_routing.Свойства объектов
aliases-
<alias> -
(Обязательно, объект) Ключ — имя псевдонима. Имена псевдонимов индексов поддерживают математику дат.
Тело объекта содержит параметры для псевдонима. Поддерживается пустой объект.
Свойства объекта
<alias>-
filter - (Необязательно, объект Query DSL) Запрос, используемый для ограничения документов, к которым может получить доступ псевдоним.
-
index_routing - (Необязательно, строка) Значение, используемое для маршрутизации операций индексирования на определённый фрагмент. Если указано, это значение перекрывает значение
routingдля операций индексирования. -
is_hidden - (Необязательно, Булево) Если
true, псевдоним скрыт. По умолчаниюfalse. Все индексы для псевдонима должны иметь одинаковое значениеis_hidden. -
is_write_index - (Необязательно, Булево) Если
true, индекс является индексом записи для псевдонима. По умолчаниюfalse. -
routing - (Необязательно, строка) Значение, используемое для маршрутизации операций индексирования и поиска на определённый фрагмент.
-
search_routing - (Необязательно, строка) Значение, используемое для маршрутизации операций поиска на определённый фрагмент. Если указано, это значение перекрывает значение
routingдля операций поиска.
-
-
-
mappings -
(Необязательно, объект отображения) Отображение для полей в индексе. Если указано, это отображение может включать:
- Имена полей
- Типы данных полей
- Параметры отображения
См. Отображение.
-
settings - (Необязательно, объект настроек индекса) Параметры конфигурации индекса. См. Настройки индекса.
-
-
version - (Необязательно, целое число) Номер версии, используемый для внешнего управления шаблонами индексов. Это число не генерируется автоматически Elasticsearch.
-
deprecated - (Необязательно, булево) Помечает этот шаблон индекса как устаревший. При создании или обновлении неустаревшего шаблона индекса, использующего устаревшие компоненты, Elasticsearch выдаст предупреждение об устаревании.
-
-
mapping_addition - (Необязательно, объект отображения) Определение отображения, которое будет объединённо с отображением индекса для проверки во время выполнения этого запроса.
Примеры
Использование существующих определений конвейера
В этом примере индекс index имеет конвейер по умолчанию, называемый my-pipeline, и конечный конвейер, называемый my-final-pipeline. Поскольку оба документа импортируются в index, оба конвейера выполняются с использованием определений конвейеров, которые уже находятся в системе.
resp = client.simulate.ingest(
docs=[
{
"_index": "my-index",
"_id": "123",
"_source": {
"foo": "bar"
}
},
{
"_index": "my-index",
"_id": "456",
"_source": {
"foo": "rab"
}
}
],
)
print(resp) response = client.simulate.ingest(
body: {
docs: [
{
_index: 'my-index',
_id: '123',
_source: {
foo: 'bar'
}
},
{
_index: 'my-index',
_id: '456',
_source: {
foo: 'rab'
}
}
]
}
)
puts response const response = await client.transport.request({
method: "POST",
path: "/_ingest/_simulate",
body: {
docs: [
{
_index: "my-index",
_id: "123",
_source: {
foo: "bar",
},
},
{
_index: "my-index",
_id: "456",
_source: {
foo: "rab",
},
},
],
},
});
console.log(response); POST /_ingest/_simulate
{
"docs": [
{
"_index": "my-index",
"_id": "123",
"_source": {
"foo": "bar"
}
},
{
"_index": "my-index",
"_id": "456",
"_source": {
"foo": "rab"
}
}
]
} API возвращает следующий ответ:
{
"docs": [
{
"doc": {
"_id": "123",
"_index": "my-index",
"_version": -3,
"_source": {
"field1": "value1",
"field2": "value2",
"foo": "bar"
},
"executed_pipelines": [
"my-pipeline",
"my-final-pipeline"
]
}
},
{
"doc": {
"_id": "456",
"_index": "my-index",
"_version": -3,
"_source": {
"field1": "value1",
"field2": "value2",
"foo": "rab"
},
"executed_pipelines": [
"my-pipeline",
"my-final-pipeline"
]
}
}
]
} Указание замены конвейера в теле запроса
В этом примере индекс my-index имеет конвейер по умолчанию, называемый my-pipeline, и конечный конвейер, называемый my-final-pipeline. Но в pipeline_substitutions предоставлено определение замены my-pipeline. Замена my-pipeline будет использоваться вместо my-pipeline, которое находится в системе, а затем будет выполнен my-final-pipeline, уже определённый в системе.
resp = client.simulate.ingest(
docs=[
{
"_index": "my-index",
"_id": "123",
"_source": {
"foo": "bar"
}
},
{
"_index": "my-index",
"_id": "456",
"_source": {
"foo": "rab"
}
}
],
pipeline_substitutions={
"my-pipeline": {
"processors": [
{
"uppercase": {
"field": "foo"
}
}
]
}
},
)
print(resp) response = client.simulate.ingest(
body: {
docs: [
{
_index: 'my-index',
_id: '123',
_source: {
foo: 'bar'
}
},
{
_index: 'my-index',
_id: '456',
_source: {
foo: 'rab'
}
}
],
pipeline_substitutions: {
"my-pipeline": {
processors: [
{
uppercase: {
field: 'foo'
}
}
]
}
}
}
)
puts response const response = await client.transport.request({
method: "POST",
path: "/_ingest/_simulate",
body: {
docs: [
{
_index: "my-index",
_id: "123",
_source: {
foo: "bar",
},
},
{
_index: "my-index",
_id: "456",
_source: {
foo: "rab",
},
},
],
pipeline_substitutions: {
"my-pipeline": {
processors: [
{
uppercase: {
field: "foo",
},
},
],
},
},
},
});
console.log(response); POST /_ingest/_simulate
{
"docs": [
{
"_index": "my-index",
"_id": "123",
"_source": {
"foo": "bar"
}
},
{
"_index": "my-index",
"_id": "456",
"_source": {
"foo": "rab"
}
}
],
"pipeline_substitutions": {
"my-pipeline": {
"processors": [
{
"uppercase": {
"field": "foo"
}
}
]
}
}
} API возвращает следующий ответ:
{
"docs": [
{
"doc": {
"_id": "123",
"_index": "my-index",
"_version": -3,
"_source": {
"field2": "value2",
"foo": "BAR"
},
"executed_pipelines": [
"my-pipeline",
"my-final-pipeline"
]
}
},
{
"doc": {
"_id": "456",
"_index": "my-index",
"_version": -3,
"_source": {
"field2": "value2",
"foo": "RAB"
},
"executed_pipelines": [
"my-pipeline",
"my-final-pipeline"
]
}
}
]
} Указание замены шаблона компонента в теле запроса
В этом примере предположим, что индекс my-index имеет жёсткую сопоставление только с ключевым полем foo. Скажем, это сопоставление полей пришло из шаблона компонента, названного my-mappings-template. Мы хотим проверить добавление нового поля, bar. Поэтому в component_template_substitutions предоставлено определение замены my-mappings-template. Замена my-mappings-template будет использоваться вместо существующего сопоставления для my-index и вместо my-mappings-template, которое находится в системе.
resp = client.simulate.ingest(
docs=[
{
"_index": "my-index",
"_id": "123",
"_source": {
"foo": "foo"
}
},
{
"_index": "my-index",
"_id": "456",
"_source": {
"bar": "rab"
}
}
],
component_template_substitutions={
"my-mappings_template": {
"template": {
"mappings": {
"dynamic": "strict",
"properties": {
"foo": {
"type": "keyword"
},
"bar": {
"type": "keyword"
}
}
}
}
}
},
)
print(resp) const response = await client.transport.request({
method: "POST",
path: "/_ingest/_simulate",
body: {
docs: [
{
_index: "my-index",
_id: "123",
_source: {
foo: "foo",
},
},
{
_index: "my-index",
_id: "456",
_source: {
bar: "rab",
},
},
],
component_template_substitutions: {
"my-mappings_template": {
template: {
mappings: {
dynamic: "strict",
properties: {
foo: {
type: "keyword",
},
bar: {
type: "keyword",
},
},
},
},
},
},
},
});
console.log(response); POST /_ingest/_simulate
{
"docs": [
{
"_index": "my-index",
"_id": "123",
"_source": {
"foo": "foo"
}
},
{
"_index": "my-index",
"_id": "456",
"_source": {
"bar": "rab"
}
}
],
"component_template_substitutions": {
"my-mappings_template": {
"template": {
"mappings": {
"dynamic": "strict",
"properties": {
"foo": {
"type": "keyword"
},
"bar": {
"type": "keyword"
}
}
}
}
}
}
} API возвращает следующий ответ:
{
"docs": [
{
"doc": {
"_id": "123",
"_index": "my-index",
"_version": -3,
"_source": {
"foo": "foo"
},
"executed_pipelines": []
}
},
{
"doc": {
"_id": "456",
"_index": "my-index",
"_version": -3,
"_source": {
"bar": "rab"
},
"executed_pipelines": []
}
}
]
}
© 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/simulate-ingest-api.html