Блоки индексов
Блоки индексов ограничивают типы операций, доступные для определенного индекса. Блоки бывают разных типов, позволяя блокировать операции записи, чтения или с метаданными. Блоки можно установить/удалить, используя динамические настройки индекса, или добавить с помощью специального API, который также гарантирует, что после успешного возврата пользователю все фрагменты индекса корректно учитывают блок, например, что все активные операции записи в индекс завершены после добавления блока записи.
Настройки блоков индекса
Следующие динамические настройки индекса определяют присутствующие блоки в индексе:
-
index.blocks.read_only - Установите в значение
true, чтобы сделать индекс и метаданные индекса только для чтения,false, чтобы разрешить записи и изменения метаданных. -
index.blocks.read_only_allow_delete -
Аналогично
index.blocks.write, за исключением того, что вы можете удалить индекс, когда этот блок установлен. Не устанавливайте и не удаляйте этот блок самостоятельно. Блокиратор фрагментов на основе дисков автоматически устанавливает и удаляет этот блок в соответствии с доступным дисковым пространством.Удаление документов из индекса для освобождения ресурсов (вместо удаления самого индекса) временно увеличивает размер индекса, и поэтому может быть невозможно, когда узлы имеют мало свободного дискового места. Когда
index.blocks.read_only_allow_deleteустановлено в значениеtrue, удаление документов запрещено. Однако, удаление всего индекса требует очень мало дополнительного дискового пространства и освобождает занимаемое индексом дисковое пространство практически мгновенно, поэтому это все еще разрешено.Elasticsearch автоматически добавляет блок только для чтения и удаления индекса, когда использование дискового пространства превышает пороговое значение, и автоматически удаляет этот блок, когда использование дискового пространства падает ниже значения высокого порога. Более подробную информацию о пороговых значениях см. в разделе Настройки распределения фрагментов на основе дисков, а помощь в решении проблем с пороговыми значениями см. в разделе Исправление ошибок пороговых значений.
-
index.blocks.read - Установите в значение
true, чтобы отключить операции чтения для индекса.
-
index.blocks.write - Установите в значение
true, чтобы отключить операции записи данных для индекса. В отличие отread_only, это значение не влияет на метаданные. Например, вы можете настроить параметры индекса с блокомwrite, но не можете настроить параметры индекса с блокомread_only. -
index.blocks.metadata - Установите в значение
true, чтобы отключить чтение и запись метаданных индекса.
API добавления блока индекса
Добавляет блок индекса в индекс.
resp = client.indices.add_block(
index="my-index-000001",
block="write",
)
print(resp) const response = await client.indices.addBlock({
index: "my-index-000001",
block: "write",
});
console.log(response); PUT /my-index-000001/_block/write
Запрос
PUT /<index>/_block/<block>
Параметры пути
-
<index> -
(Необязательно, строка) Список или выражение с подстановкой по шаблону, разделенные запятыми, имён индексов, используемых для ограничения запроса.
По умолчанию вы должны явно указать индексы, к которым вы добавляете блоки. Чтобы разрешить добавление блоков к индексам с
_all,*или другими шаблонами подстановки, измените настройкуaction.destructive_requires_nameнаfalse. Вы можете обновить эту настройку в файлеelasticsearch.ymlили с помощью API обновления настроек кластера. -
<block> -
(Обязательно, строка) Тип блока, который необходимо добавить в индекс.
Допустимые значения для
<block>-
metadata - Отключить изменения метаданных, такие как закрытие индекса.
-
read - Отключить операции чтения.
-
read_only - Отключить операции записи и изменения метаданных.
-
write - Отключить операции записи. Однако изменения метаданных все еще разрешены.
-
Параметры запроса
-
allow_no_indices -
(Необязательно, булево) Если
false, запрос возвращает ошибку, если какое-либо выражение с подстановкой по шаблону, алиас индекса или значение_allссылаются только на отсутствующие или закрытые индексы. Это поведение применяется даже если запрос направлен на другие открытые индексы. Например, запрос, направленный наfoo*,bar*, возвращает ошибку, если индекс начинается сfoo, но ни один индекс не начинается сbar.По умолчанию
true. -
expand_wildcards -
(Необязательно, строка) Тип индекса, с которым могут совпадать шаблоны подстановки. Если запрос может указывать на потоки данных, этот аргумент определяет, соответствуют ли шаблоны подстановки скрытым потокам данных. Поддерживает значения, разделённые запятыми, такие как
open,hidden. Допустимые значения:-
all - Соответствие любому потоку данных или индексу, включая скрытые.
-
open - Соответствие открытым, нескрытым индексам. Также соответствует любым нескрытым потокам данных.
-
closed - Соответствие закрытым, нескрытым индексам. Также соответствует любым нескрытым потокам данных. Потоки данных не могут быть закрыты.
-
hidden - Соответствие скрытым потокам данных и скрытым индексам. Должно быть комбинировано с
open,closedили обоими. -
none - Шаблоны подстановки не принимаются.
По умолчанию
open. -
-
ignore_unavailable - (Необязательно, булево) Если
false, запрос возвращает ошибку, если он указывает на отсутствующий или закрытый индекс. По умолчаниюfalse. -
master_timeout - (Необязательно, единицы времени) Время ожидания узла мастера. Если узел мастера недоступен до истечения срока ожидания, запрос завершается ошибкой. По умолчанию
30s. Также может быть установлено в значение-1, чтобы указать, что запрос никогда не должен завершаться по таймауту. -
timeout - (Необязательно, единицы времени) Время ожидания ответа от всех соответствующих узлов в кластере после обновления метаданных кластера. Если ответ не получен до истечения срока ожидания, обновление метаданных кластера все равно выполняется, но ответ укажет, что оно не было полностью подтверждено. По умолчанию
30s. Также может быть установлено в значение-1, чтобы указать, что запрос никогда не должен завершаться по таймауту.
Примеры
Следующий пример демонстрирует добавление блока индекса:
resp = client.indices.add_block(
index="my-index-000001",
block="write",
)
print(resp) const response = await client.indices.addBlock({
index: "my-index-000001",
block: "write",
});
console.log(response); PUT /my-index-000001/_block/write
API возвращает следующий ответ:
{
"acknowledged" : true,
"shards_acknowledged" : true,
"indices" : [ {
"name" : "my-index-000001",
"blocked" : true
} ]
}
© 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/index-modules-blocks.html