Elasticsearch 索引API:映射(Mapping)操作全流程实战(创建/查看/修改/新增字段)
- 前言
- 一、核心概念:什么是索引映射(Mapping)?
- 1.1 定义
- 1.2 映射核心作用
- 1.3 索引映射操作流程图
- 二、映射常用字段类型(必须掌握)
- 三、索引API:映射操作全实战
- 3.1 索引API:创建索引时定义映射(推荐)
- 3.2 索引API:查看索引现有映射
- 3.3 索引API:给索引新增字段(支持动态添加)
- 3.4 索引API:关闭动态映射(防止自动生成错误字段)
- 3.5 索引API:给text类型字段设置keyword子字段(常用)
- 3.6 索引API:删除映射(不支持单独删除,需删除索引)
- 四、重要规则:映射不能修改,只能新增
- 4.1 禁止操作
- 4.2 解决方案
- 五、企业级最佳实践
- 六、常见问题
- 6.1 修改字段类型报错
- 6.2 无法聚合text字段
- 6.3 自动生成了错误字段
- 七、总结
- 总结
🌺The Begin🌺点点关注,收藏不迷路🌺 |
前言
在 Elasticsearch 中,映射(Mapping)是索引的核心结构,相当于数据库的表结构定义,用于指定字段类型、分词器、是否索引、是否存储等规则。索引API是操作映射的唯一入口,所有映射相关操作都必须通过索引API完成。
本文详细讲解如何使用索引API进行索引的映射操作,包含创建映射、查看映射、新增字段、更新字段、动态映射关闭等全场景实战,附带流程图、标准标题、可直接运行的DSL,适用于ES 7.x/8.x全版本,可直接发布CSDN。
一、核心概念:什么是索引映射(Mapping)?
1.1 定义
索引映射:用于定义索引中字段的名称、数据类型、分词规则、索引规则的JSON结构,是ES实现高效搜索的基础。
1.2 映射核心作用
- 定义字段类型(text、keyword、integer、date等)
- 设置中文分词器(IK)
- 控制字段是否参与搜索
- 控制字段是否存储
- 提升搜索精度与性能
1.3 索引映射操作流程图
二、映射常用字段类型(必须掌握)
| 字段类型 | 用途 |
|---|---|
| text | 全文检索字段,支持分词(文章、标题、内容) |
| keyword | 精确匹配字段,不分词(状态、分类、ID) |
| integer/long | 数字类型 |
| date | 日期类型 |
| boolean | 布尔类型 |
| object | 对象类型 |
三、索引API:映射操作全实战
3.1 索引API:创建索引时定义映射(推荐)
功能:创建索引的同时,直接定义字段映射结构
PUT/user_index{"settings":{"number_of_shards":1,"number_of_replicas":0},"mappings":{"properties":{"name":{"type":"text","analyzer":"ik_max_word"},"age":{"type":"integer"},"phone":{"type":"keyword"},"create_time":{"type":"date"}}}}3.2 索引API:查看索引现有映射
功能:查看指定索引的字段类型、分词器、配置信息
GET/user_index/_mapping返回结果包含所有字段的完整映射定义。
3.3 索引API:给索引新增字段(支持动态添加)
功能:在已有索引中新增字段,ES允许随时新增字段
PUT/user_index/_mapping{"properties":{"email":{"type":"keyword"},"address":{"type":"text","analyzer":"ik_smart"}}}3.4 索引API:关闭动态映射(防止自动生成错误字段)
功能:禁止ES自动识别字段类型,避免脏数据
PUT/user_index{"mappings":{"dynamic":"strict",// 严格模式,遇到未知字段直接报错"properties":{"name":{"type":"text"}}}}dynamic可选值:
- true:默认,自动创建字段
- false:不创建,但存储数据
- strict:严格模式,报错拒绝写入
3.5 索引API:给text类型字段设置keyword子字段(常用)
功能:一个字段既支持分词搜索,又支持精确聚合
PUT/article_index{"mappings":{"properties":{"title":{"type":"text","analyzer":"ik_max_word","fields":{"keyword":{"type":"keyword","ignore_above":256}}}}}}使用:
- 搜索:title
- 聚合/排序:title.keyword
3.6 索引API:删除映射(不支持单独删除,需删除索引)
ES不支持直接删除单个字段映射,只能删除整个索引重建
DELETE/user_index四、重要规则:映射不能修改,只能新增
4.1 禁止操作
已存在的字段,不能修改类型
例如:name从text改为keyword → 报错
4.2 解决方案
- 新增字段
- 重建索引(reindex)
五、企业级最佳实践
- 创建索引时提前定义好映射,不要依赖动态映射
- text字段必须搭配keyword子字段,用于排序、聚合
- 中文分词字段必须指定
ik_max_word - 关闭动态映射
dynamic: strict避免脏数据 - 不修改旧字段,只新增字段
六、常见问题
6.1 修改字段类型报错
- 原因:ES不允许修改已有字段映射
- 解决:新增字段或重建索引
6.2 无法聚合text字段
- 原因:text不能聚合
- 解决:增加keyword子字段
6.3 自动生成了错误字段
- 原因:开启了动态映射
- 解决:设置dynamic: strict
七、总结
- 映射操作全部通过索引API(_mapping)完成
- 支持:创建映射、查看映射、新增字段、关闭动态映射
- 不支持:修改字段类型、删除单个字段
- text + keyword 是企业最常用组合
- 严格映射能大幅提升ES稳定性与查询效率
总结
- 映射操作核心API:
PUT /索引/_mapping - 支持:创建、查看、新增字段
- 不支持:修改字段类型、删除字段
- 最佳实践:创建索引时定义完整映射 + 严格模式
🌺The End🌺点点关注,收藏不迷路🌺 |