首页/数据/NoSQL 速查/更新索引 settings
Elasticsearch89 条

更新索引 settings

部分索引设置可以动态更新:副本数、刷新间隔、结果窗口上限、分片分配开关等;主分片数与分词器类设置不能热改,需要重建索引或先关闭索引。

NoSQL 速查数据更新于 2026-10-13

哪些设置能热改

索引设置分动态与静态两类。副本数、刷新间隔、结果窗口上限、分片分配开关这些可以边跑边改;主分片数、已存在字段的分析器这类属于静态设置,热改会被直接拒绝,只能新建索引再迁移数据。

基本信息

适用版本Elasticsearch 7.x / 8.x
接口PUT /<index>/_settings
可动态改number_of_replicas、refresh_interval、max_result_window、routing.allocation.enable、blocks.*
静态项number_of_shards、已存在字段的 analyzer
查看命令GET /<index>/_settings?include_defaults=true

典型使用场景

  • 提高可用性:把 number_of_replicas 从 1 调到 2,容忍单节点故障
  • 写入调优:批量导入期把 refresh_interval 放宽到 30s 或 -1,减少小段
  • 支持更大的页面:临时调高 max_result_window,让业务侧的大分页先跑通
  • 滚动重启或迁移:先设 routing.allocation.enable=primaries 抑制分片搬迁,完成后恢复 all
  • 防误写与冻结:对历史索引设置 blocks.read_only,避免被程序写脏

示例

示例
PUT /my-index/_settings
{
  "index": {
    "number_of_replicas": 2,
    "refresh_interval": "5s",
    "max_result_window": 20000
  }
}

GET /my-index/_settings?include_defaults=true    # 连默认值一起看,排查“谁改过什么”

PUT /my-index/_settings
{ "index": { "routing.allocation.enable": "primaries" } }   # 滚动重启前,减少分片搬迁
PUT /my-index/_settings
{ "index": { "routing.allocation.enable": "all" } }         # 重启完成后恢复

PUT /logs-2026.10.*/_settings                   # 通配多个索引,改名范围前先用 _cat/indices 核对
{ "index": { "blocks.read_only": true } }

可动态更新项

设置项作用注意点
number_of_replicas副本数写入高峰上调会触发分片复制,吞吐短时下降
refresh_interval自动刷新周期-1 关闭自动刷新,新文档需手动 _refresh 才可见
max_result_windowfrom+size 的结果窗口上限,默认 10000放开只是解除限制,深分页成本没变
routing.allocation.enable控制分片分配设 none/primaries 后要记得恢复 all,否则新分片一直未分配
blocks.read_only把索引置为只读需要在迁移或防误写场景显式撤销
number_of_shards主分片数(静态)只能在创建时指定,改不了,需 _reindex 重建
只想改那些没有显式配置过的项,可以加 ?preserve_existing=true;这对批量下发统一设置很实用,能避免覆盖个别索引上的手工设置。
索引级设置只影响当前索引;想让新建索引自带这些值,要么写进索引模板,要么调整集群级默认设置(PUT /_cluster/settings)。
静态设置在运行中的索引上改会返回 illegal_argument_exception;看到错误别反复重试,先确认该项属于哪一类,再决定是否走重建索引流程。

易错点

  • 想在已有索引上把 number_of_shards 改大,PUT 必然失败(静态设置)→ 只能新建索引后用 _reindex 迁移
  • 调大 max_result_window 以为解决了深分页,实际单次查询成本没变 → 正常做法是 search_after 或 PIT
  • 写入高峰增加副本数会触发大量分片复制,写入吞吐短时下降
  • 关掉分片分配后忘了恢复(仍是 none/primaries),新建分片长期未分配直到磁盘告急
  • 用通配符改设置时范围写太宽,误改到不该动的索引 → 改前先 GET /_cat/indices 核对名单

数据来源与参考

  • Elasticsearch Guide: Update index settings API
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌