索引块

编辑

索引块限制了对特定索引可用的操作类型。这些块有不同的形式,允许阻止写入、读取或元数据操作。可以使用动态索引设置来设置/移除这些块,也可以使用专门的 API 添加这些块。对于写入块,API 还可以确保在成功返回给用户后,索引的所有分片都正确地考虑了该块,例如,在添加写入块后,所有正在进行的索引写入都已完成。

索引块设置

编辑

以下动态索引设置决定了索引上存在的块。

index.blocks.read_only
设置为 true 使索引和索引元数据只读,设置为 false 允许写入和元数据更改。
index.blocks.read_only_allow_delete

index.blocks.write 类似,只是当此块生效时,您可以删除索引。请不要自行设置或删除此块。 基于磁盘的分片分配器 会根据可用的磁盘空间自动设置和删除此块。

从索引中删除文档以释放资源(而不是删除索引本身)会暂时增加索引的大小,因此当节点磁盘空间不足时,可能无法进行此操作。当 index.blocks.read_only_allow_delete 设置为 true 时,不允许删除文档。但是,完全删除索引只需要很少的额外磁盘空间,并且几乎可以立即释放索引占用的磁盘空间,因此仍然允许这样做。

当磁盘利用率超过洪水线水位时,Elasticsearch 会自动添加 read-only-allow-delete 索引块,当磁盘利用率降至高水位以下时,会自动删除此块。有关水位的更多信息,请参阅基于磁盘的分片分配,有关解决水位问题的帮助,请参阅修复水位错误

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
匹配隐藏的数据流和隐藏的索引。必须与 openclosed 或两者结合使用。
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
  } ]
}