更新索引设置 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 /<目标>/_settings
路径参数
编辑-
<目标>
- (可选,字符串) 以逗号分隔的数据流、索引和别名列表,用于限制请求。 支持通配符(
*
)。 要定位所有数据流和索引,请省略此参数或使用*
或_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
参数在自动关闭的索引上更改索引设置将导致索引在重新打开的过程中暂时不可用。
示例
编辑重置索引设置
编辑要将设置恢复为默认值,请使用 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
更新索引分析
编辑您只能在关闭的索引上定义新的分析器。
要添加分析器,您必须关闭索引,定义分析器,然后重新打开索引。
您无法关闭数据流的写入索引。
要更新数据流写入索引和将来后备索引的分析器,请更新 流使用的索引模板中的分析器。 然后滚动数据流,以将新分析器应用于流的写入索引和将来的后备索引。 这会影响搜索和在滚动后添加到流的任何新数据。 但是,它不会影响数据流的后备索引或其现有数据。
要更改现有后备索引的分析器,您必须创建新的数据流并将数据重新索引到其中。 请参阅 使用重新索引来更改映射或设置。
例如,以下命令将 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