索引块
编辑索引块编辑
索引块限制了特定索引上可用的操作类型。块有不同的类型,允许阻止写入、读取或元数据操作。块可以使用动态索引设置进行设置/删除,也可以使用专用 API 添加,该 API 还确保写入块在成功返回给用户后,索引的所有分片都正确地考虑了该块,例如,在添加写入块后,所有正在进行的索引写入都已完成。
索引块设置编辑
以下动态索引设置决定了索引上存在的块
-
index.blocks.read_only
- 设置为
true
使索引和索引元数据只读,设置为false
允许写入和元数据更改。 -
index.blocks.read_only_allow_delete
-
类似于
index.blocks.write
,但当此块存在时,您可以删除索引。不要自己设置或删除此块。 基于磁盘的分片分配器 会根据可用磁盘空间自动设置和删除此块。从索引中删除文档以释放资源 - 而不是删除索引本身 - 会暂时增加索引大小,因此当节点磁盘空间不足时可能无法执行。当
index.blocks.read_only_allow_delete
设置为true
时,不允许删除文档。但是,完全删除索引只需要很少的额外磁盘空间,并且几乎立即释放索引占用的磁盘空间,因此仍然允许这样做。 -
index.blocks.read
- 设置为
true
禁用对索引的读取操作。
-
index.blocks.write
- 设置为
true
禁用对索引的数据写入操作。与read_only
不同,此设置不会影响元数据。例如,您可以使用write
块调整索引的设置,但不能使用read_only
块调整索引的设置。 -
index.blocks.metadata
- 设置为
true
禁用索引元数据的读取和写入。
添加索引块 API编辑
将索引块添加到索引。
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
。
示例编辑
以下示例显示了如何添加索引块
PUT /my-index-000001/_block/write
API 返回以下响应
{ "acknowledged" : true, "shards_acknowledged" : true, "indices" : [ { "name" : "my-index-000001", "blocked" : true } ] }