当前位置: 首页 > news >正文

【Elasticsearch从入门到精通】第11篇:Elasticsearch索引API详解——索引创建、删除与别名管理

上一篇【第10篇】Elasticsearch REST API最佳实践——Content-Type、模糊性与访问控制
下一篇【第12篇】Elasticsearch读写原理——主备复制模型与数据一致性


摘要

索引(Index)是Elasticsearch中数据的逻辑容器,一切文档读写操作都在索引层面进行。掌握索引管理API是ES运维的核心技能之一。本文从索引创建开始,详解索引命名规则、settings(分片数、副本数、刷新间隔)和mappings(字段映射定义)的配置方法;接着系统讲解索引别名的各种用法——包括过滤别名(filtered alias)、路由别名(routed alias),以及如何利用别名实现零停机的索引重建;然后介绍索引的打开/关闭、收缩操作和索引模板(Index Template)的配置;最后覆盖索引的删除、存在性判断等常用运维操作。通过大量完整的REST API示例和对比表格,帮助读者快速掌握索引管理的方方面面。


一、创建索引

1.1 基本创建

最简单的方式——使用所有默认配置:

PUT/twitter

响应:

{"acknowledged":true,"shards_acknowledged":true,"index":"twitter"}

1.2 索引命名规则

索引名称必须遵循以下限制:

规则说明
仅限小写字母大写字母不被允许
禁止特殊字符\/*?"<>|、空格、,#
禁止冒号7.0+版本不支持冒号(:
禁止特殊开头不能以-_+开头
禁止点号不能是...
长度限制不能超过255字节(UTF-8编码)

合法索引名示例twittermy-index-001logs_2026_05app_v2_data

非法索引名示例Twittermy-indexlogs:2026.hidden_internal

1.3 创建时指定settings和mappings

PUT/products{"settings":{"number_of_shards":3,"number_of_replicas":1,"refresh_interval":"5s"},"mappings":{"properties":{"name":{"type":"text","analyzer":"ik_max_word"},"category":{"type":"keyword"},"price":{"type":"double"},"description":{"type":"text"},"created_at":{"type":"date","format":"yyyy-MM-dd HH:mm:ss||epoch_millis"},"is_active":{"type":"boolean"}}}}

1.4 Settings配置详解

创建索引时可以指定多种settings:

PUT/my_index{"settings":{"number_of_shards":3,"number_of_replicas":1,"refresh_interval":"5s","index":{"max_result_window":10000,"number_of_routing_shards":30,"analysis":{"analyzer":{"my_analyzer":{"type":"custom","tokenizer":"standard","filter":["lowercase","my_synonym_filter"]}}}}}}

常用settings参数

参数默认值说明
number_of_shards1主分片数量(创建后不可修改)
number_of_replicas1每个主分片的副本数(可动态修改)
refresh_interval1s索引刷新间隔
max_result_window10000搜索结果最大返回数
number_of_routing_shards与shards相同用于索引分裂时路由计算

关键提醒number_of_shards在索引创建后不可修改!务必在创建前合理规划。如果需要更多分片,可以通过索引分裂或重建索引来实现。


二、索引的删除与判断

2.1 删除索引

# 删除单个索引DELETE /twitter# 删除多个索引DELETE /index1,index2# 使用通配符删除DELETE /logs-2026-0*

警告:删除索引是不可逆操作!索引及其所有数据将永久丢失,无法恢复。请务必谨慎操作。

2.2 判断索引是否存在

# 存在返回200,不存在返回404HEAD /twitter
# 使用curlcurl-I-uelastic:password-khttps://localhost:9200/twitter# HTTP/1.1 200 OK → 存在# HTTP/1.1 404 Not Found → 不存在

2.3 打开和关闭索引

关闭的索引几乎不消耗集群资源(仅维护元数据),但无法进行读写操作。

# 关闭索引POST /my_index/_close# 打开索引POST /my_index/_open

适用场景:暂时不使用的索引(如历史归档数据),可以关闭以释放资源,需要时再打开。

2.4 收缩索引

将一个索引收缩为具有较少主分片的新索引。目标分片数必须是源分片数的因数。

// 收缩前的准备工作PUT/my_source_index/_settings{"settings":{"index.blocks.write":true}}// 执行收缩(8个分片收缩为2个)POST/my_source_index/_shrink/my_target_index{"settings":{"index.number_of_shards":2,"index.number_of_replicas":1,"index.blocks.write":null}}

收缩规则示例

源分片数可收缩为
84, 2, 1
126, 4, 3, 2, 1
155, 3, 1
7(质数)1

三、别名管理(Aliases)

别名是Elasticsearch中非常实用的功能,可以为索引创建一个或多个替代名称,用于简化查询、实现无缝切换和零停机索引重建。

3.1 基本别名操作

// 创建索引时同时创建别名PUT/products_v1{"aliases":{"products":{},"products_search":{}}}// 通过别名查询GET/products/_search{"query":{"match_all":{}}}
// 通过API添加别名POST/_aliases{"actions":[{"add":{"index":"products_v1","alias":"products"}}]}// 删除别名POST/_aliases{"actions":[{"remove":{"index":"products_v1","alias":"products"}}]}

3.2 过滤别名(Filtered Alias)

过滤别名允许你为别名添加过滤条件,用户通过别名查询时只能看到满足条件的文档。

POST/_aliases{"actions":[{"add":{"index":"products","alias":"products_active","filter":{"term":{"is_active":true}}}}]}
// 通过过滤别名查询——只会返回is_active=true的文档GET/products_active/_search{"query":{"match_all":{}}}

3.3 路由别名(Routed Alias)

路由别名可以指定查询和索引时的路由值,提高查询效率:

POST/_aliases{"actions":[{"add":{"index":"logs","alias":"logs_beijing","routing":"beijing"}}]}
# 通过路由别名查询——只在北京分片上查询GET /logs_beijing/_search?q=error

3.4 别名操作完整语法

POST/_aliases{"actions":[{"add":{"index":"index1","alias":"alias1","filter":{"term":{"status":"published"}},"routing":"1","search_routing":"1,2","index_routing":"1"}},{"remove":{"index":"index1","alias":"alias1"}},{"add":{"index":"index2","alias":"alias1"}}]}
别名参数说明
index关联的索引名称
alias别名名称
filter过滤条件(可选)
routing读写共用的路由值
search_routing搜索时的路由值
index_routing索引时的路由值

3.5 使用别名实现零停机索引重建

这是一个非常实用的运维技巧——在不停服的情况下重建索引。

// 步骤1:创建新索引PUT/products_v2{"settings":{"number_of_shards":5},"mappings":{...}}// 步骤2:将旧索引数据复制到新索引POST/_reindex{"source":{"index":"products_v1"},"dest":{"index":"products_v2"}}// 步骤3:原子切换别名POST/_aliases{"actions":[{"remove":{"index":"products_v1","alias":"products"}},{"add":{"index":"products_v2","alias":"products"}}]}// 步骤4:验证新索引正常后,删除旧索引DELETE/products_v1

零停机重建流程对比

步骤操作集群影响
1创建新索引几乎无影响
2Reindex数据消耗IO和CPU,但不影响读写
3原子切换别名瞬间完成,客户端无感知
4删除旧索引释放磁盘空间

四、索引模板(Index Template)

索引模板允许你预先定义索引的settings和mappings,当创建匹配特定模式的索引时自动应用模板配置。

4.1 创建索引模板

PUT/_template/logs_template{"index_patterns":["logs-*"],"settings":{"number_of_shards":3,"number_of_replicas":1,"refresh_interval":"10s"},"mappings":{"properties":{"@timestamp":{"type":"date"},"level":{"type":"keyword"},"message":{"type":"text"},"service":{"type":"keyword"},"host":{"type":"keyword"}}}}

4.2 模板匹配验证

// 创建匹配logs-*模式的索引PUT/logs-2026-05-22// 查看自动应用的配置GET/logs-2026-05-22/_settingsGET/logs-2026-05-22/_mapping

4.3 组件模板(Component Templates)与可组合模板

从Elasticsearch 7.8开始,推荐使用组件模板+可组合索引模板(Composable Index Templates):

// 创建组件模板1——settingsPUT/_component_template/logs_settings{"template":{"settings":{"number_of_shards":3,"number_of_replicas":1}}}// 创建组件模板2——mappingsPUT/_component_template/logs_mappings{"template":{"mappings":{"properties":{"@timestamp":{"type":"date"},"level":{"type":"keyword"},"message":{"type":"text"}}}}}// 创建可组合索引模板,引用组件模板PUT/_index_template/logs_template{"index_patterns":["logs-*"],"composed_of":["logs_settings","logs_mappings"],"priority":200}

两种模板方式对比

特性传统模板可组合模板
创建APIPUT /_template/PUT /_index_template/
可复用性整体定义,不易复用组件化,灵活复用
版本管理支持version字段
优先级无显式优先级priority参数控制
推荐度7.x兼容7.8+推荐使用

4.4 查看和删除模板

# 查看所有模板GET /_template# 查看指定模板GET /_template/logs_template# 删除模板DELETE /_template/logs_template

五、索引的其他管理操作

5.1 修改索引settings(动态更新)

部分settings可以在运行时动态修改,无需重建索引:

// 修改副本数PUT/products/_settings{"number_of_replicas":2}// 修改刷新间隔PUT/products/_settings{"refresh_interval":"30s"}// 设置为只读PUT/products/_settings{"index.blocks.write":true}

可动态修改 vs 不可动态修改的settings

操作是否可动态修改说明
修改副本数可以number_of_replicas
修改刷新间隔可以refresh_interval
设置只读可以index.blocks.write
修改分片数不可以需要重建索引或使用shrink/split
修改字段类型不可以需要重建索引

5.2 查看索引信息

# 查看索引settingsGET /products/_settings?pretty# 查看索引mappingsGET /products/_mapping?pretty# 同时查看settings和mappingsGET /products# 查看索引统计信息GET /products/_stats?pretty

5.3 索引操作API速查表

操作HTTP方法API
创建索引PUTPUT /{index}
删除索引DELETEDELETE /{index}
判断索引存在HEADHEAD /{index}
打开索引POSTPOST /{index}/_open
关闭索引POSTPOST /{index}/_close
查看索引GETGET /{index}
修改settingsPUTPUT /{index}/_settings
查看mappingsGETGET /{index}/_mapping
收缩索引POSTPOST /{index}/_shrink/{target}
索引统计GETGET /{index}/_stats

六、总结与最佳实践

核心要点回顾

主题关键API/配置说明
索引创建PUT /{index}带settings和mappings创建
命名规则小写+不含特殊字符遵循命名限制
分片规划30-50GB/分片创建后不可修改
别名管理POST /_aliasesadd/remove/filter/routing
零停机重建别名原子切换旧数据reindex到新索引
索引模板PUT /_index_template/预定义索引配置,自动应用

索引管理最佳实践

  1. 提前规划分片数number_of_shards创建后不可修改,务必根据数据量合理规划。宁可分片稍多,也不要太大。
  2. 使用别名做应用层抽象:应用程序只通过别名访问索引,不要直接使用索引名。这样索引重建、分片调整等运维操作对应用透明。
  3. 利用索引模板统一管理:对于基于时间的索引(日志等),使用索引模板确保所有索引配置一致。
  4. 采用可组合模板:Elasticsearch 7.8+推荐使用组件模板+可组合模板,提升配置的复用性和可维护性。
  5. 关闭不活跃的索引:对于长期不需要访问的历史索引,关闭以节省集群资源。
  6. 定期清理旧索引:结合ILM(索引生命周期管理)自动删除过期索引,避免分片数量无限增长。
  7. 重建索引前做好备份:虽然可以通过别名切换实现零停机,但重建前仍建议做好快照备份。

上一篇【第10篇】Elasticsearch REST API最佳实践——Content-Type、模糊性与访问控制
下一篇【第12篇】Elasticsearch读写原理——主备复制模型与数据一致性


http://www.cnnetsun.cn/news/2523210.html

相关文章:

  • 三步搞定B站缓存视频合并:让离线观看体验更完整
  • Burp Suite入门实战:从HTTP协议到Web渗透测试全流程
  • 神经网络性能优化四层穿透法:从算法到硬件的全栈调优
  • 终极指南:5步掌握Reloaded-II游戏Mod加载器的核心功能
  • 如何用Blender3mfFormat插件完美处理3MF文件:终极3D打印工作流指南
  • Windows系统Btrfs文件系统实战指南:从零开始配置与管理
  • 如何高效管理动物森友会存档:NHSE完整使用指南
  • OneMore插件:5个必知功能让你的OneNote效率翻倍
  • Maya glTF插件完整指南:如何将Maya 3D模型高效转换为Web标准格式
  • XUnity自动翻译器终极指南:5分钟快速上手游戏实时翻译
  • 电动飞机静音革命:eVTOL技术如何重塑城市空中交通
  • Unity卡通UI开发:Cartoon GUI Pack工程化实践指南
  • 如何5分钟搭建拼多多数据采集系统:电商运营的终极指南
  • Godot粒子纹理集:2的幂次方+预乘Alpha+语义命名三合一解决方案
  • 3分钟学会用untrunc修复损坏的MP4视频文件:零基础视频恢复终极指南
  • 魔兽争霸III终极优化工具:解决宽屏拉伸与高帧率限制的完整指南
  • 从零手写推理模型:MoE、RoPE与GQA的工程实现
  • 【Claude】光纤激光器深度拆解、电气系统设计理念解读及其电气系统设计 、C++软件代码框架
  • 显卡驱动彻底清理指南:5分钟掌握DDU专业工具的使用技巧
  • 开源抖音下载神器:三步搞定批量下载难题
  • OneNote终极效率插件:3个核心技巧让你的笔记管理更智能
  • LIO-SAM建图后,如何用liorf_localization让你的机器人‘找回自己’?一份重定位配置避坑指南
  • 海康工业相机Bayer转RGB实战:从MVS客户端选型到OpenCV调用的完整避坑指南
  • 避坑指南:在Windows 11上搞定ADSP-21569的SigmaStudio 4.6图形化开发环境
  • ViGEmBus虚拟游戏控制器驱动:Windows输入模拟终极指南
  • 三步实现Mac微信防撤回:完整保护聊天信息不消失
  • DownKyi:解锁B站8K超高清视频下载的5个核心优势
  • Keil µVision调试XC16x内存访问冲突解决方案
  • 水凝胶作为功能载体的优势有哪些?
  • 告别枯燥理论!用Vivado和ILA手把手调试你的DDR3 AXI4接口