更新索引设置 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

先决条件

编辑
  • 如果启用了 Elasticsearch 安全功能,则您必须拥有目标数据流、索引或别名的 manage 索引权限

路径参数

编辑
<目标>
(可选,字符串) 以逗号分隔的数据流、索引和别名列表,用于限制请求。 支持通配符(*)。 要定位所有数据流和索引,请省略此参数或使用 *_all

查询参数

编辑
allow_no_indices

(可选,布尔值) 如果为 false,则如果任何通配符表达式、索引别名_all 值仅定位缺失或关闭的索引,则请求将返回错误。 即使请求定位其他打开的索引,此行为也适用。 例如,如果索引以 foo 开头,但没有索引以 bar 开头,则定位 foo*,bar* 的请求将返回错误。

默认为 false

expand_wildcards

(可选,字符串) 通配符模式可以匹配的索引类型。 如果请求可以定位数据流,则此参数确定通配符表达式是否匹配隐藏的数据流。 支持以逗号分隔的值,例如 open,hidden。 有效值为

all
匹配任何数据流或索引,包括隐藏的数据流或索引。
open
匹配打开的非隐藏索引。 也匹配任何非隐藏的数据流。
closed
匹配关闭的非隐藏索引。 也匹配任何非隐藏的数据流。 数据流无法关闭。
hidden
匹配隐藏的数据流和隐藏索引。 必须与 openclosed 或两者结合使用。
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

更新索引分析

编辑

您只能在关闭的索引上定义新的分析器。

要添加分析器,您必须关闭索引,定义分析器,然后重新打开索引。

您无法关闭数据流的写入索引。

要更新数据流写入索引和将来后备索引的分析器,请更新 流使用的索引模板中的分析器。 然后滚动数据流,以将新分析器应用于流的写入索引和将来的后备索引。 这会影响搜索和在滚动后添加到流的任何新数据。 但是,它不会影响数据流的后备索引或其现有数据。

要更改现有后备索引的分析器,您必须创建新的数据流并将数据重新索引到其中。 请参阅 使用重新索引来更改映射或设置

例如,以下命令将 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