Spec-Zone.ru › Elasticsearch 8
›Руководство по Elasticsearch [8.17] ›REST API ›API индексов

API обновления настроек индекса

Справочник по новым API

Для получения самых последних данных об API обратитесь к API индексов.

Изменяет динамическую настройку индекса в реальном времени.

Для потоков данных изменения настроек индекса применяются ко всем базовым индексам по умолчанию.

resp = client.indices.put_settings(
    index="my-index-000001",
    settings={
        "index": {
            "number_of_replicas": 2
        }
    },
)
print(resp)
response = client.indices.put_settings(
  index: 'my-index-000001',
  body: {
    index: {
      number_of_replicas: 2
    }
  }
)
puts response
const response = await client.indices.putSettings({
  index: "my-index-000001",
  settings: {
    index: {
      number_of_replicas: 2,
    },
  },
});
console.log(response);
PUT /my-index-000001/_settings
{
  "index" : {
    "number_of_replicas" : 2
  }
}

Запрос

PUT /<target>/_settings

Предварительные условия

  • Если включены функции безопасности Elasticsearch, у вас должна быть manage разрешение на индексы для целевого потока данных, индекса или псевдонима.

Параметры пути

<target>
(Необязательный, строка) Список потоков данных, индексов и псевдонимов, разделенных запятыми, используемых для ограничения запроса. Поддерживает подстановку шаблонов (*). Чтобы обработать все потоки данных и индексы, опустите этот параметр или используйте * или _all.

Параметры запроса

allow_no_indices

(Необязательный, логический) Если false, запрос возвращает ошибку, если выражения с подстановкой шаблонов, псевдоним индекса или _all значение указывает только отсутствующие или закрытые индексы. Это поведение применяется даже если запрос направлен на другие открытые индексы. Например, запрос, направленный на foo*,bar*, возвращает ошибку, если индекс начинается с foo, но ни один индекс не начинается с bar.

По умолчанию false.

expand_wildcards

(Необязательный, строка) Тип индекса, с которым могут совпадать шаблоны подстановки. Если запрос может обработать потоки данных, этот аргумент определяет, соответствуют ли выражения с подстановкой шаблонов скрытым потокам данных. Поддерживает значения, разделенные запятыми, например, open,hidden. Допустимые значения:

all
Соответствует любому потоку данных или индексу, включая скрытые.
open
Соответствует открытым, нескрытым индексам. Также соответствует любому нескрытому потоку данных.
closed
Соответствует закрытым, нескрытым индексам. Также соответствует любому нескрытому потоку данных. Потоки данных не могут быть закрыты.
hidden
Соответствует скрытым потокам данных и скрытым индексам. Должно быть совмещено с open, closed или обоими.
none
Шаблоны подстановки не принимаются.

По умолчанию open.

flat_settings
(Необязательный, логический) Если true, возвращает настройки в плоском формате. По умолчанию false.
ignore_unavailable
(Необязательный, логический) Если false, запрос возвращает ошибку, если он направлен на отсутствующий или закрытый индекс. По умолчанию false.
preserve_existing
(Необязательный, логический) Если true, существующие настройки индекса остаются неизменными. По умолчанию false.
reopen
(Необязательный, логический) Если true, все статические настройки, которые обычно обновляются только при закрытии индексов, будут обновлены путём автоматического закрытия и повторного открытия затронутых индексов. Если false, попытки обновления статических настроек в открытых индексах завершатся ошибкой. По умолчанию false.

Изменение настроек индекса в автоматически закрытом индексе с помощью параметра reopen приведет к тому, что индекс ненадолго станет недоступным во время процесса повторного открытия.

master_timeout
(Необязательный, единицы времени) Период ожидания мастера узла. Если мастер узел не доступен до истечения таймаута, запрос завершается ошибкой. По умолчанию 30s. Также может быть установлен на -1, чтобы указать, что запрос никогда не должен таймаутиться.
timeout
(Необязательный, единицы времени) Период ожидания ответа от всех соответствующих узлов в кластере после обновления метаданных кластера. Если ответ не получен до истечения таймаута, обновление метаданных кластера всё равно применяется, но ответ укажет, что оно не было полностью подтверждено. По умолчанию 30s. Также может быть установлен на -1, чтобы указать, что запрос никогда не должен таймаутиться.

Тело запроса

settings
(Необязательный, объект настроек индекса) Параметры конфигурации для индекса. См. Настройки индекса.

Примеры

Сброс настройки индекса

Для сброса настройки до значения по умолчанию используйте null. Например:

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

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

Использование массового индексирования

Например, API обновления настроек можно использовать для динамического изменения индекса, чтобы он был более производительным для массового индексирования, а затем перевести его в режим индексирования в реальном времени. Перед запуском массового индексирования используйте:

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

(Другой вариант оптимизации — запустить индекс без реплик и добавить их только позже, но это действительно зависит от конкретного случая использования).

Затем, после завершения массового индексирования, настройки можно обновить (например, до значений по умолчанию):

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

И необходимо вызвать слияние:

resp = client.indices.forcemerge(
    index="my-index-000001",
    max_num_segments="5",
)
print(resp)
response = client.indices.forcemerge(
  index: 'my-index-000001',
  max_num_segments: 5
)
puts response
const response = await client.indices.forcemerge({
  index: "my-index-000001",
  max_num_segments: 5,
});
console.log(response);
POST /my-index-000001/_forcemerge?max_num_segments=5

Обновление анализа индекса

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

Чтобы добавить анализатор, необходимо закрыть индекс, определить анализатор и открыть индекс заново.

Нельзя закрыть индекс записи потока данных.

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

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

Например, следующие команды добавляют анализатор content в индекс my-index-000001:

resp = client.indices.close(
    index="my-index-000001",
)
print(resp)

resp1 = client.indices.put_settings(
    index="my-index-000001",
    settings={
        "analysis": {
            "analyzer": {
                "content": {
                    "type": "custom",
                    "tokenizer": "whitespace"
                }
            }
        }
    },
)
print(resp1)

resp2 = client.indices.open(
    index="my-index-000001",
)
print(resp2)
response = client.indices.close(
  index: 'my-index-000001'
)
puts response

response = client.indices.put_settings(
  index: 'my-index-000001',
  body: {
    analysis: {
      analyzer: {
        content: {
          type: 'custom',
          tokenizer: 'whitespace'
        }
      }
    }
  }
)
puts response

response = client.indices.open(
  index: 'my-index-000001'
)
puts response
const response = await client.indices.close({
  index: "my-index-000001",
});
console.log(response);

const response1 = await client.indices.putSettings({
  index: "my-index-000001",
  settings: {
    analysis: {
      analyzer: {
        content: {
          type: "custom",
          tokenizer: "whitespace",
        },
      },
    },
  },
});
console.log(response1);

const response2 = await client.indices.open({
  index: "my-index-000001",
});
console.log(response2);
POST /my-index-000001/_close

PUT /my-index-000001/_settings
{
  "analysis" : {
    "analyzer":{
      "content":{
        "type":"custom",
        "tokenizer":"whitespace"
      }
    }
  }
}

POST /my-index-000001/_open

© 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/indices-update-settings.html

END_OF_DOCUMENT_MARKER

Spec-Zone.ru

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