Spec-Zone.ru › Elasticsearch 8
›Elasticsearch Guide [8.17] ›Потоки данных

Изменение потока данных

Изменение отображения и настроек для потока данных

Каждый поток данных имеет соответствующую шаблон индекса. Отображения и настройки индекса из этого шаблона применяются к новым индексам, созданным для потока. Это включает первый поддерживающий индекс потока, который автоматически генерируется при создании потока.

Перед созданием потока данных рекомендуется тщательно оценить, какие отображения и настройки включить в этот шаблон.

Если позже вам понадобится изменить отображения или настройки для потока данных, у вас есть несколько вариантов:

  • Добавить новое отображение поля в поток данных
  • Изменить существующее отображение поля в потоке данных
  • Изменить динамическую настройку индекса для потока данных
  • Изменить статическую настройку индекса для потока данных

Если ваши изменения включают модификации существующих отображений полей или статических настроек индекса, часто требуется переиндексация для применения изменений к поддерживающим индексам потока данных. Если вы уже выполняете переиндексацию, вы можете использовать ту же процедуру для добавления новых отображений полей и изменения динамических настроек индекса. См. Использование переиндексации для изменения отображений или настроек.

Добавление нового отображения поля в поток данных

Чтобы добавить отображение для нового поля в поток данных, выполните следующие действия:

  1. Обновите шаблон индекса, используемый потоком данных. Это гарантирует, что новое отображение поля будет добавлено в будущие поддерживающие индексы, созданные для потока.

    Например, my-data-stream-template — это существующий шаблон индекса, используемый my-data-stream.

    Следующий запрос на создание или обновление шаблона индекса добавляет отображение для нового поля, message, в шаблон.

    resp = client.indices.put_index_template(
        name="my-data-stream-template",
        index_patterns=[
            "my-data-stream*"
        ],
        data_stream={},
        priority=500,
        template={
            "mappings": {
                "properties": {
                    "message": {
                        "type": "text"
                    }
                }
            }
        },
    )
    print(resp)
    response = client.indices.put_index_template(
      name: 'my-data-stream-template',
      body: {
        index_patterns: [
          'my-data-stream*'
        ],
        data_stream: {},
        priority: 500,
        template: {
          mappings: {
            properties: {
              message: {
                type: 'text'
              }
            }
          }
        }
      }
    )
    puts response
    const response = await client.indices.putIndexTemplate({
      name: "my-data-stream-template",
      index_patterns: ["my-data-stream*"],
      data_stream: {},
      priority: 500,
      template: {
        mappings: {
          properties: {
            message: {
              type: "text",
            },
          },
        },
      },
    });
    console.log(response);
    PUT /_index_template/my-data-stream-template
    {
      "index_patterns": [ "my-data-stream*" ],
      "data_stream": { },
      "priority": 500,
      "template": {
        "mappings": {
          "properties": {
            "message": {                              
              "type": "text"
            }
          }
        }
      }
    }

    Добавляет отображение для нового поля message.

  2. Используйте API для обновления отображения, чтобы добавить новое отображение поля в поток данных. По умолчанию это добавляет отображение в существующие поддерживающие индексы потока, включая индекс записи.

    Следующий запрос API для обновления отображения добавляет новое отображение поля message в my-data-stream.

    resp = client.indices.put_mapping(
        index="my-data-stream",
        properties={
            "message": {
                "type": "text"
            }
        },
    )
    print(resp)
    response = client.indices.put_mapping(
      index: 'my-data-stream',
      body: {
        properties: {
          message: {
            type: 'text'
          }
        }
      }
    )
    puts response
    const response = await client.indices.putMapping({
      index: "my-data-stream",
      properties: {
        message: {
          type: "text",
        },
      },
    });
    console.log(response);
    PUT /my-data-stream/_mapping
    {
      "properties": {
        "message": {
          "type": "text"
        }
      }
    }

    Чтобы добавить отображение только в индекс записи потока, установите параметр запроса API обновления отображения write_index_only в значение true.

    Следующий запрос обновления отображения добавляет новое отображение поля message только в индекс записи my-data-stream. Новое отображение поля не добавляется в другие поддерживающие индексы потока.

    resp = client.indices.put_mapping(
        index="my-data-stream",
        write_index_only=True,
        properties={
            "message": {
                "type": "text"
            }
        },
    )
    print(resp)
    response = client.indices.put_mapping(
      index: 'my-data-stream',
      write_index_only: true,
      body: {
        properties: {
          message: {
            type: 'text'
          }
        }
      }
    )
    puts response
    const response = await client.indices.putMapping({
      index: "my-data-stream",
      write_index_only: "true",
      properties: {
        message: {
          type: "text",
        },
      },
    });
    console.log(response);
    PUT /my-data-stream/_mapping?write_index_only=true
    {
      "properties": {
        "message": {
          "type": "text"
        }
      }
    }

Изменение существующего отображения поля в потоке данных

Документация для каждого параметра отображения указывает, можно ли обновить его для существующего поля с помощью API обновления отображения. Чтобы обновить эти параметры для существующего поля, выполните следующие действия:

  1. Обновите шаблон индекса, используемый потоком данных. Это гарантирует, что обновленное отображение поля будет добавлено в будущие поддерживающие индексы, созданные для потока.

    Например, my-data-stream-template — это существующий шаблон индекса, используемый my-data-stream.

    Следующий запрос на создание или обновление шаблона индекса изменяет аргумент параметра отображения поля host.ip ignore_malformed на true.

    resp = client.indices.put_index_template(
        name="my-data-stream-template",
        index_patterns=[
            "my-data-stream*"
        ],
        data_stream={},
        priority=500,
        template={
            "mappings": {
                "properties": {
                    "host": {
                        "properties": {
                            "ip": {
                                "type": "ip",
                                "ignore_malformed": True
                            }
                        }
                    }
                }
            }
        },
    )
    print(resp)
    response = client.indices.put_index_template(
      name: 'my-data-stream-template',
      body: {
        index_patterns: [
          'my-data-stream*'
        ],
        data_stream: {},
        priority: 500,
        template: {
          mappings: {
            properties: {
              host: {
                properties: {
                  ip: {
                    type: 'ip',
                    ignore_malformed: true
                  }
                }
              }
            }
          }
        }
      }
    )
    puts response
    const response = await client.indices.putIndexTemplate({
      name: "my-data-stream-template",
      index_patterns: ["my-data-stream*"],
      data_stream: {},
      priority: 500,
      template: {
        mappings: {
          properties: {
            host: {
              properties: {
                ip: {
                  type: "ip",
                  ignore_malformed: true,
                },
              },
            },
          },
        },
      },
    });
    console.log(response);
    PUT /_index_template/my-data-stream-template
    {
      "index_patterns": [ "my-data-stream*" ],
      "data_stream": { },
      "priority": 500,
      "template": {
        "mappings": {
          "properties": {
            "host": {
              "properties": {
                "ip": {
                  "type": "ip",
                  "ignore_malformed": true            
                }
              }
            }
          }
        }
      }
    }

    Изменяет значение поля host.ip ignore_malformed на true.

  2. Используйте API обновления отображения, чтобы применить изменения отображения к потоку данных. По умолчанию это применяет изменения к существующим поддерживающим индексам потока, включая индекс записи.

    Следующий запрос API обновления отображения нацелен на my-data-stream. Запрос изменяет аргумент параметра отображения поля host.ip ignore_malformed на true.

    resp = client.indices.put_mapping(
        index="my-data-stream",
        properties={
            "host": {
                "properties": {
                    "ip": {
                        "type": "ip",
                        "ignore_malformed": True
                    }
                }
            }
        },
    )
    print(resp)
    response = client.indices.put_mapping(
      index: 'my-data-stream',
      body: {
        properties: {
          host: {
            properties: {
              ip: {
                type: 'ip',
                ignore_malformed: true
              }
            }
          }
        }
      }
    )
    puts response
    const response = await client.indices.putMapping({
      index: "my-data-stream",
      properties: {
        host: {
          properties: {
            ip: {
              type: "ip",
              ignore_malformed: true,
            },
          },
        },
      },
    });
    console.log(response);
    PUT /my-data-stream/_mapping
    {
      "properties": {
        "host": {
          "properties": {
            "ip": {
              "type": "ip",
              "ignore_malformed": true
            }
          }
        }
      }
    }

    Чтобы применить изменения отображения только к индексу записи потока, установите параметр запроса API put mapping write_index_only в значение true.

    Следующий запрос обновления отображения изменяет отображение поля host.ip только для индекса записи my-data-stream. Изменение не применяется к другим поддерживающим индексам потока.

    resp = client.indices.put_mapping(
        index="my-data-stream",
        write_index_only=True,
        properties={
            "host": {
                "properties": {
                    "ip": {
                        "type": "ip",
                        "ignore_malformed": True
                    }
                }
            }
        },
    )
    print(resp)
    response = client.indices.put_mapping(
      index: 'my-data-stream',
      write_index_only: true,
      body: {
        properties: {
          host: {
            properties: {
              ip: {
                type: 'ip',
                ignore_malformed: true
              }
            }
          }
        }
      }
    )
    puts response
    const response = await client.indices.putMapping({
      index: "my-data-stream",
      write_index_only: "true",
      properties: {
        host: {
          properties: {
            ip: {
              type: "ip",
              ignore_malformed: true,
            },
          },
        },
      },
    });
    console.log(response);
    PUT /my-data-stream/_mapping?write_index_only=true
    {
      "properties": {
        "host": {
          "properties": {
            "ip": {
              "type": "ip",
              "ignore_malformed": true
            }
          }
        }
      }
    }

За исключением поддерживаемых параметров отображения, не рекомендуется изменять отображение или тип данных поля существующих полей, даже в шаблоне соответствия индекса потока данных или его поддерживающих индексах. Изменение отображения существующего поля может привести к недействительности любых уже проиндексированных данных.

Если вам необходимо изменить отображение существующего поля, создайте новый поток данных и переиндексируйте данные в него. См. Использование переиндексации для изменения отображений или настроек.

Изменение динамической настройки индекса для потока данных

Чтобы изменить динамическую настройку индекса для потока данных, выполните следующие действия:

  1. Обновите шаблон индекса, используемый потоком данных. Это гарантирует, что настройка будет применена к будущим поддерживающим индексам, созданным для потока.

    Например, my-data-stream-template — это существующий шаблон индекса, используемый my-data-stream.

    Следующий запрос на создание или обновление шаблона индекса изменяет настройку индекса index.refresh_interval шаблона на 30s (30 секунд).

    resp = client.indices.put_index_template(
        name="my-data-stream-template",
        index_patterns=[
            "my-data-stream*"
        ],
        data_stream={},
        priority=500,
        template={
            "settings": {
                "index.refresh_interval": "30s"
            }
        },
    )
    print(resp)
    response = client.indices.put_index_template(
      name: 'my-data-stream-template',
      body: {
        index_patterns: [
          'my-data-stream*'
        ],
        data_stream: {},
        priority: 500,
        template: {
          settings: {
            'index.refresh_interval' => '30s'
          }
        }
      }
    )
    puts response
    const response = await client.indices.putIndexTemplate({
      name: "my-data-stream-template",
      index_patterns: ["my-data-stream*"],
      data_stream: {},
      priority: 500,
      template: {
        settings: {
          "index.refresh_interval": "30s",
        },
      },
    });
    console.log(response);
    PUT /_index_template/my-data-stream-template
    {
      "index_patterns": [ "my-data-stream*" ],
      "data_stream": { },
      "priority": 500,
      "template": {
        "settings": {
          "index.refresh_interval": "30s"             
        }
      }
    }

    Изменяет настройку index.refresh_interval на 30s (30 секунд).

  2. Используйте API обновления настроек индекса, чтобы обновить настройку индекса для потока данных. По умолчанию это применяет настройку к существующим поддерживающим индексам потока, включая индекс записи.

    Следующий запрос API обновления настроек индекса обновляет настройку index.refresh_interval для my-data-stream.

    resp = client.indices.put_settings(
        index="my-data-stream",
        settings={
            "index": {
                "refresh_interval": "30s"
            }
        },
    )
    print(resp)
    response = client.indices.put_settings(
      index: 'my-data-stream',
      body: {
        index: {
          refresh_interval: '30s'
        }
      }
    )
    puts response
    const response = await client.indices.putSettings({
      index: "my-data-stream",
      settings: {
        index: {
          refresh_interval: "30s",
        },
      },
    });
    console.log(response);
    PUT /my-data-stream/_settings
    {
      "index": {
        "refresh_interval": "30s"
      }
    }

Чтобы изменить настройку index.lifecycle.name, сначала используйте API удаления политики ILM, чтобы удалить существующую политику ILM. См. Переключение политик жизненного цикла.

Изменение статического параметра индекса для потока данных

Статические параметры индекса могут быть установлены только при создании базового индекса. Вы не можете обновить статические параметры индекса с помощью API обновления параметров индекса.

Чтобы применить новое статическое значение к будущим базовым индексам, обновите шаблон индекса, используемый потоком данных. Настройка автоматически применяется к любому базовому индексу, созданному после обновления.

Например, my-data-stream-template — это существующий шаблон индекса, используемый my-data-stream.

Следующие запросы создания или обновления шаблона индекса добавляют новые sort.field и sort.order index параметры в шаблон.

resp = client.indices.put_index_template(
    name="my-data-stream-template",
    index_patterns=[
        "my-data-stream*"
    ],
    data_stream={},
    priority=500,
    template={
        "settings": {
            "sort.field": [
                "@timestamp"
            ],
            "sort.order": [
                "desc"
            ]
        }
    },
)
print(resp)
response = client.indices.put_index_template(
  name: 'my-data-stream-template',
  body: {
    index_patterns: [
      'my-data-stream*'
    ],
    data_stream: {},
    priority: 500,
    template: {
      settings: {
        'sort.field' => [
          '@timestamp'
        ],
        'sort.order' => [
          'desc'
        ]
      }
    }
  }
)
puts response
const response = await client.indices.putIndexTemplate({
  name: "my-data-stream-template",
  index_patterns: ["my-data-stream*"],
  data_stream: {},
  priority: 500,
  template: {
    settings: {
      "sort.field": ["@timestamp"],
      "sort.order": ["desc"],
    },
  },
});
console.log(response);
PUT /_index_template/my-data-stream-template
{
  "index_patterns": [ "my-data-stream*" ],
  "data_stream": { },
  "priority": 500,
  "template": {
    "settings": {
      "sort.field": [ "@timestamp"],             
      "sort.order": [ "desc"]                    
    }
  }
}

Добавляет параметр индекса sort.field.

Добавляет параметр индекса sort.order.

При необходимости вы можете произвести сброс потока данных, чтобы немедленно применить настройку к индексу записи потока данных. Это повлияет на любые новые данные, добавленные в поток после сброса. Однако это не повлияет на существующие базовые индексы потока данных или существующие данные.

Чтобы применить изменения статических параметров к существующим базовым индексам, необходимо создать новый поток данных и переиндексировать ваши данные в него. См. Использование переиндексации для изменения отображений или настроек.

Использование переиндексации для изменения отображений или настроек

Вы можете использовать переиндексацию для изменения отображений или настроек потока данных. Это часто требуется для изменения типа данных существующего поля или обновления статических параметров индекса для базовых индексов.

Чтобы переиндексировать поток данных, сначала создайте или обновите шаблон индекса, чтобы он содержал желаемые изменения отображений или настроек. Затем вы можете переиндексировать существующий поток данных в новый поток, соответствующий шаблону. Это применяет изменения отображений и настроек в шаблоне к каждому документу и базовому индексу, добавленному в новый поток данных. Эти изменения также влияют на любой будущий базовый индекс, созданный новым потоком.

Выполните следующие действия:

  1. Выберите имя или шаблон индекса для нового потока данных. Этот новый поток данных будет содержать данные из вашего существующего потока.

    Вы можете использовать API разрешения индекса, чтобы проверить, соответствует ли имя или шаблон каким-либо существующим индексам, псевдонимам или потокам данных. В случае совпадения, следует рассмотреть использование другого имени или шаблона.

    Следующий запрос к API разрешения индекса проверяет наличие существующих индексов, псевдонимов или потоков данных, начинающихся с new-data-stream. Если таких нет, можно использовать шаблон индекса new-data-stream* для создания нового потока данных.

    resp = client.indices.resolve_index(
        name="new-data-stream*",
    )
    print(resp)
    response = client.indices.resolve_index(
      name: 'new-data-stream*'
    )
    puts response
    const response = await client.indices.resolveIndex({
      name: "new-data-stream*",
    });
    console.log(response);
    GET /_resolve/index/new-data-stream*

    API возвращает следующий ответ, указывающий, что ни один существующий целевой объект не соответствует этому шаблону.

    {
      "indices": [ ],
      "aliases": [ ],
      "data_streams": [ ]
    }
  2. Создайте или обновите шаблон индекса. Этот шаблон должен содержать отображения и настройки, которые вы хотите применить к базовым индексам нового потока данных.

    Этот шаблон индекса должен соответствовать требованиям к шаблону потока данных. Он также должен содержать ранее выбранное имя или шаблон индекса в свойстве index_patterns.

    Если вы добавляете или изменяете только несколько элементов, рекомендуем создать новый шаблон, скопировав существующий и внеся необходимые изменения.

    Например, my-data-stream-template — это существующий шаблон индекса, используемый my-data-stream.

    Следующий запрос к API создания или обновления шаблона индекса создаёт новый шаблон индекса, new-data-stream-template. new-data-stream-template базируется на my-data-stream-template, с внесёнными изменениями:

    • Шаблон индекса в index_patterns соответствует любому индексу или потоку данных, начинающемуся с new-data-stream.
    • Отображение поля @timestamp использует тип данных поля date_nanos вместо типа данных date.
    • Шаблон включает настройки индекса sort.field и sort.order, которые отсутствовали в исходном шаблоне my-data-stream-template.
    resp = client.indices.put_index_template(
        name="new-data-stream-template",
        index_patterns=[
            "new-data-stream*"
        ],
        data_stream={},
        priority=500,
        template={
            "mappings": {
                "properties": {
                    "@timestamp": {
                        "type": "date_nanos"
                    }
                }
            },
            "settings": {
                "sort.field": [
                    "@timestamp"
                ],
                "sort.order": [
                    "desc"
                ]
            }
        },
    )
    print(resp)
    response = client.indices.put_index_template(
      name: 'new-data-stream-template',
      body: {
        index_patterns: [
          'new-data-stream*'
        ],
        data_stream: {},
        priority: 500,
        template: {
          mappings: {
            properties: {
              "@timestamp": {
                type: 'date_nanos'
              }
            }
          },
          settings: {
            'sort.field' => [
              '@timestamp'
            ],
            'sort.order' => [
              'desc'
            ]
          }
        }
      }
    )
    puts response
    const response = await client.indices.putIndexTemplate({
      name: "new-data-stream-template",
      index_patterns: ["new-data-stream*"],
      data_stream: {},
      priority: 500,
      template: {
        mappings: {
          properties: {
            "@timestamp": {
              type: "date_nanos",
            },
          },
        },
        settings: {
          "sort.field": ["@timestamp"],
          "sort.order": ["desc"],
        },
      },
    });
    console.log(response);
    PUT /_index_template/new-data-stream-template
    {
      "index_patterns": [ "new-data-stream*" ],
      "data_stream": { },
      "priority": 500,
      "template": {
        "mappings": {
          "properties": {
            "@timestamp": {
              "type": "date_nanos"                 
            }
          }
        },
        "settings": {
          "sort.field": [ "@timestamp"],          
          "sort.order": [ "desc"]                 
        }
      }
    }

    Изменяет отображение поля @timestamp на тип данных поля date_nanos.

    Добавляет настройку индекса sort.field.

    Добавляет настройку индекса sort.order.

  3. Используйте API создания потока данных для ручного создания нового потока данных. Имя потока данных должно соответствовать шаблону индекса, определённому в свойстве index_patterns нового шаблона.

    Не рекомендуется индексировать новые данные для создания этого потока данных. Позже вы переиндексируете старые данные из существующего потока данных в этот новый. Это может привести к одному или нескольким базовым индексам, содержащим смесь новых и старых данных.

    Смешивание новых и старых данных в потоке данных

    Хотя смешивание новых и старых данных безопасно, оно может повлиять на сохранение данных. Если вы удалите старые индексы, вы можете случайно удалить базовый индекс, содержащий как новые, так и старые данные. Чтобы предотвратить преждевременную потерю данных, вам необходимо сохранить такой базовый индекс до тех пор, пока вы не будете готовы удалить его новейшие данные.

    Следующий запрос к API создания потока данных нацелен на new-data-stream, который соответствует шаблону индекса для new-data-stream-template. Поскольку ни один существующий индекс или поток данных не использует это имя, этот запрос создаёт поток данных new-data-stream.

    resp = client.indices.create_data_stream(
        name="new-data-stream",
    )
    print(resp)
    response = client.indices.create_data_stream(
      name: 'new-data-stream'
    )
    puts response
    const response = await client.indices.createDataStream({
      name: "new-data-stream",
    });
    console.log(response);
    PUT /_data_stream/new-data-stream
  4. Если вы не хотите смешивать новые и старые данные в новом потоке данных, приостановите индексацию новых документов. Хотя смешивание старых и новых данных безопасно, оно может повлиять на сохранение данных. См. Смешивание новых и старых данных в потоке данных.
  5. Если вы используете ILM для автоматизации перехода, уменьшите интервал опроса ILM. Это гарантирует, что текущий индекс записи не станет слишком большим, ожидая проверки перехода. По умолчанию ILM проверяет условия перехода каждые 10 минут.

    Следующий запрос к API настройки кластера уменьшает настройку indices.lifecycle.poll_interval до значения 1m (одна минута).

    resp = client.cluster.put_settings(
        persistent={
            "indices.lifecycle.poll_interval": "1m"
        },
    )
    print(resp)
    response = client.cluster.put_settings(
      body: {
        persistent: {
          'indices.lifecycle.poll_interval' => '1m'
        }
      }
    )
    puts response
    const response = await client.cluster.putSettings({
      persistent: {
        "indices.lifecycle.poll_interval": "1m",
      },
    });
    console.log(response);
    PUT /_cluster/settings
    {
      "persistent": {
        "indices.lifecycle.poll_interval": "1m"
      }
    }
  6. Переиндексируйте данные в новый поток данных с помощью op_type create.

    Если вы хотите разбить данные в порядке их первоначального индексирования, вы можете выполнить отдельные запросы переиндексирования. Эти запросы переиндексирования могут использовать отдельные базовые индексы в качестве источника. Вы можете использовать API получения потока данных для получения списка базовых индексов.

    Например, вы планируете переиндексировать данные из my-data-stream в new-data-stream. Однако вы хотите отправить отдельный запрос переиндексирования для каждого базового индекса в my-data-stream, начиная со старейшего базового индекса. Это сохранит порядок, в котором данные изначально были индексированы.

    Следующий запрос к API получения потока данных получает информацию о my-data-stream, включая список его базовых индексов.

    resp = client.indices.get_data_stream(
        name="my-data-stream",
    )
    print(resp)
    response = client.indices.get_data_stream(
      name: 'my-data-stream'
    )
    puts response
    const response = await client.indices.getDataStream({
      name: "my-data-stream",
    });
    console.log(response);
    GET /_data_stream/my-data-stream

    Свойство indices ответа содержит массив текущих базовых индексов потока. Первый элемент массива содержит информацию о старейшем базовом индексе потока.

    {
      "data_streams": [
        {
          "name": "my-data-stream",
          "timestamp_field": {
            "name": "@timestamp"
          },
          "indices": [
            {
              "index_name": ".ds-my-data-stream-2099.03.07-000001", 
              "index_uuid": "Gpdiyq8sRuK9WuthvAdFbw",
              "prefer_ilm": true,
              "managed_by": "Unmanaged"
            },
            {
              "index_name": ".ds-my-data-stream-2099.03.08-000002",
              "index_uuid": "_eEfRrFHS9OyhqWntkgHAQ",
              "prefer_ilm": true,
              "managed_by": "Unmanaged"
            }
          ],
          "generation": 2,
          "status": "GREEN",
          "next_generation_managed_by": "Unmanaged",
          "prefer_ilm": true,
          "template": "my-data-stream-template",
          "hidden": false,
          "system": false,
          "allow_custom_routing": false,
          "replicated": false,
          "rollover_on_write": false
        }
      ]
    }

    Первый элемент массива indices для my-data-stream. Этот элемент содержит информацию о старейшем базовом индексе потока, .ds-my-data-stream-2099.03.07-000001.

    Следующий запрос к API переиндексирования копирует документы из .ds-my-data-stream-2099.03.07-000001 в new-data-stream. Свойство op_type запроса равно create.

    resp = client.reindex(
        source={
            "index": ".ds-my-data-stream-2099.03.07-000001"
        },
        dest={
            "index": "new-data-stream",
            "op_type": "create"
        },
    )
    print(resp)
    response = client.reindex(
      body: {
        source: {
          index: '.ds-my-data-stream-2099.03.07-000001'
        },
        dest: {
          index: 'new-data-stream',
          op_type: 'create'
        }
      }
    )
    puts response
    const response = await client.reindex({
      source: {
        index: ".ds-my-data-stream-2099.03.07-000001",
      },
      dest: {
        index: "new-data-stream",
        op_type: "create",
      },
    });
    console.log(response);
    POST /_reindex
    {
      "source": {
        "index": ".ds-my-data-stream-2099.03.07-000001"
      },
      "dest": {
        "index": "new-data-stream",
        "op_type": "create"
      }
    }

    Вы также можете использовать запрос для переиндексирования только подмножества документов в каждом запросе.

    Следующий запрос к API переиндексирования копирует документы из my-data-stream в new-data-stream. Запрос использует range запрос, чтобы переиндексировать только документы с отметкой времени за последнюю неделю. Обратите внимание, что свойство op_type запроса равно create.

    resp = client.reindex(
        source={
            "index": "my-data-stream",
            "query": {
                "range": {
                    "@timestamp": {
                        "gte": "now-7d/d",
                        "lte": "now/d"
                    }
                }
            }
        },
        dest={
            "index": "new-data-stream",
            "op_type": "create"
        },
    )
    print(resp)
    response = client.reindex(
      body: {
        source: {
          index: 'my-data-stream',
          query: {
            range: {
              "@timestamp": {
                gte: 'now-7d/d',
                lte: 'now/d'
              }
            }
          }
        },
        dest: {
          index: 'new-data-stream',
          op_type: 'create'
        }
      }
    )
    puts response
    const response = await client.reindex({
      source: {
        index: "my-data-stream",
        query: {
          range: {
            "@timestamp": {
              gte: "now-7d/d",
              lte: "now/d",
            },
          },
        },
      },
      dest: {
        index: "new-data-stream",
        op_type: "create",
      },
    });
    console.log(response);
    POST /_reindex
    {
      "source": {
        "index": "my-data-stream",
        "query": {
          "range": {
            "@timestamp": {
              "gte": "now-7d/d",
              "lte": "now/d"
            }
          }
        }
      },
      "dest": {
        "index": "new-data-stream",
        "op_type": "create"
      }
    }
  7. Если вы ранее изменили интервал опроса ILM, измените его обратно на исходное значение после завершения переиндексирования. Это предотвращает ненужную нагрузку на главный узел.

    Следующий запрос к API настройки кластера сбрасывает настройку indices.lifecycle.poll_interval до её значения по умолчанию.

    resp = client.cluster.put_settings(
        persistent={
            "indices.lifecycle.poll_interval": None
        },
    )
    print(resp)
    response = client.cluster.put_settings(
      body: {
        persistent: {
          'indices.lifecycle.poll_interval' => nil
        }
      }
    )
    puts response
    const response = await client.cluster.putSettings({
      persistent: {
        "indices.lifecycle.poll_interval": null,
      },
    });
    console.log(response);
    PUT /_cluster/settings
    {
      "persistent": {
        "indices.lifecycle.poll_interval": null
      }
    }
  8. Возобновите индексацию, используя новый поток данных. Поиски в этом потоке данных теперь будут запрашивать ваши новые данные и переиндексированные данные.
  1. После проверки того, что все переиндексированные данные доступны в новом потоке данных, вы можете безопасно удалить старый поток.

    Следующий запрос API удаления потока данных удаляет my-data-stream. Этот запрос также удаляет базовые индексы потока и все данные, которые они содержат.

    resp = client.indices.delete_data_stream(
        name="my-data-stream",
    )
    print(resp)
    response = client.indices.delete_data_stream(
      name: 'my-data-stream'
    )
    puts response
    const response = await client.indices.deleteDataStream({
      name: "my-data-stream",
    });
    console.log(response);
    DELETE /_data_stream/my-data-stream

Обновить или добавить псевдоним к потоку данных

Используйте API псевдонимов, чтобы обновить существующие псевдонимы потока данных. Изменение существующих псевдонимов потока данных в его шаблоне индекса не повлияет.

Например, псевдоним logs указывает на один поток данных. Следующий запрос меняет поток для псевдонима. Во время этой смены псевдониму logs не требуется время простоя, и он никогда не указывает на оба потока одновременно.

resp = client.indices.update_aliases(
    actions=[
        {
            "remove": {
                "index": "logs-nginx.access-prod",
                "alias": "logs"
            }
        },
        {
            "add": {
                "index": "logs-my_app-default",
                "alias": "logs"
            }
        }
    ],
)
print(resp)
response = client.indices.update_aliases(
  body: {
    actions: [
      {
        remove: {
          index: 'logs-nginx.access-prod',
          alias: 'logs'
        }
      },
      {
        add: {
          index: 'logs-my_app-default',
          alias: 'logs'
        }
      }
    ]
  }
)
puts response
const response = await client.indices.updateAliases({
  actions: [
    {
      remove: {
        index: "logs-nginx.access-prod",
        alias: "logs",
      },
    },
    {
      add: {
        index: "logs-my_app-default",
        alias: "logs",
      },
    },
  ],
});
console.log(response);
POST _aliases
{
  "actions": [
    {
      "remove": {
        "index": "logs-nginx.access-prod",
        "alias": "logs"
      }
    },
    {
      "add": {
        "index": "logs-my_app-default",
        "alias": "logs"
      }
    }
  ]
}

© 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/modify-data-streams.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API