首页/数据/NoSQL 速查/创建索引与分片副本设置
Elasticsearch89 条

创建索引与分片副本设置

建索引时用 settings 指定主分片数、副本数与刷新间隔,mappings 里显式定义字段类型;主分片数建好后不可直接修改。

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

创建索引是什么

建索引时用 settings 指定主分片数、副本数与刷新间隔,mappings 里显式定义字段类型。主分片数建好之后不能直接修改,只能通过 reindex 或 shrink/split 迁移;副本数与刷新间隔可以随时调整。索引名只能用小写字母,同一索引只允许一种映射结构,因此分片数和字段类型的规划要在动手前想清楚。

基本信息

接口PUT /<index>
可动态改number_of_replicas、refresh_interval、max_result_window
不可改number_of_shards(需迁移或重建)
命名规则小写字母,不能含空格、逗号、星号,不以 - _ + 开头
常用参数wait_for_active_shards、aliases
适用版本Elasticsearch 7.x / 8.x

典型使用场景

  • 新业务上线前建好索引与映射,避免自动映射产生错误类型
  • 按时间滚动建索引,如 logs-2026.10
  • 迁移重建时先建目标索引,再 reindex 数据
  • 给索引绑定写别名,为后续零停机切换做准备
  • 为聚合场景预留 keyword 子字段与 doc_values
  • 测试环境按小分片建索引,节省资源

示例

示例
PUT /my-index-000001
{
  "settings": {
    "number_of_shards": 3,
    "number_of_replicas": 1,
    "refresh_interval": "1s"
  },
  "mappings": {
    "properties": {
      "@timestamp": { "type": "date" },
      "message": { "type": "text" },
      "user_id": { "type": "keyword" }
    }
  },
  "aliases": { "my-index": { "is_write_index": true } }
}

设置项能否动态修改

设置项是否可动态改说明
number_of_shards不可以只能重建或 shrink/split
number_of_replicas可以调整后立即触发分片复制
refresh_interval可以导入期调大可提升吞吐
max_result_window可以调大只是放开限制
mapping.properties只能新增已有字段类型不可改
alias可以用 _aliases 原子增删

分片规划要点

  • 分片数要与数据量、节点数一起估算,建好之后改动代价大
  • 单分片体积建议控制在几十 GB 量级,过大影响恢复速度
  • 分母片会增加集群状态开销,索引数量不宜无限膨胀
  • 副本数提高可用性与读吞吐,同时占用成倍磁盘
  • 写多读少的场景副本不宜过多,避免写入放大
  • 滚动索引场景配合索引模板统一分片与副本配置
索引名只能用小写字母,不能含大写、空格、逗号、星号等字符;同一索引只允许一种映射结构,字段类型出错后只能重建。
分片数要按数据量与节点数预估,建好之后再改只能重建索引,代价远高于一开始就把参数定对。
副本数可以随时调整,但新增副本会立即占用节点磁盘与写入带宽,业务高峰期调整要评估影响。
建索引时用 wait_for_active_shards 可以等待分片就绪,写入前调用可避免刚建好就写入受挫;别名配合索引模板是滚动索引的标准做法。

与模板和别名的配合

  • 用索引模板统一新索引的分片、副本与映射,避免每次手写
  • 滚动索引场景固定写别名,写入只指向当前索引
  • 别名切换用 _aliases 原子操作,减少查询真空期
  • 模板里设置好生命周期策略名,新索引自动纳入管理
  • 映射变更时先建新索引再切别名,历史索引保留只读
  • 索引命名统一带业务与日期,巡检与清理才不会漏

建索引前检查清单

  • 确认索引名合法:全小写、不含空格与特殊字符
  • 确认别名是否已存在,避免命名冲突
  • 评估数据量与增长速度,定下分片数与副本数
  • 按查询模式定字段类型,字符串想清楚 text 还是 keyword
  • 需要排序聚合的字段确保有 keyword 子字段
  • 时间字段显式声明 date 与 format
创建索引时可以一并声明别名与映射,一次请求完成;分步创建虽然结果相同,但中间状态更容易被其他程序误用。

易错点

  • 分片数建好无法直接修改,预估错误只能重建索引,代价很大
  • 副本数可以随时改,但副本会立刻占用磁盘与写入带宽,高峰调整影响明显
  • 索引名含大写或特殊字符会直接被拒绝,自动化脚本拼接时要先做合法性校验
  • 依赖动态映射让首条数据决定字段类型,日期或数字被推断成错的类型后无法修改
  • 建索引不带别名,后续做滚动切换或迁移时需要停机改配置,成本更高

数据来源与参考

  • Elasticsearch Guide: Create index API
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌