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