Elasticsearch核心:Mapping映射全解析+定义实战教程
Elasticsearch核心Mapping映射全解析定义实战教程一、前言二、基础概念什么是Elasticsearch Mapping2.1 核心定义2.2 Mapping核心作用2.3 Mapping工作流程图三、Elasticsearch Mapping的两种类型3.1 类型1动态映射Dynamic Mapping3.1.1 原理3.1.2 自动类型推断规则3.1.3 优缺点3.1.4 动态映射演示自动创建3.2 类型2静态映射Static Mapping3.2.1 原理3.2.2 优缺点3.2.3 静态映射演示手动创建四、Elasticsearch 常用核心字段类型4.1 核心字段类型清单4.2 关键字段类型对比五、如何定义Elasticsearch Mapping3种实战方式5.1 方式1创建索引时定义静态Mapping生产首选5.2 方式2动态映射自动创建仅测试5.3 方式3新增字段动态更新Mapping六、Mapping核心注意事项必看避坑指南6.1 核心规则新手必背6.2 生产最佳实践七、查看与管理Mapping常用命令7.1 查看索引Mapping7.2 删除索引修改Mapping必须删除重建八、总结The Begin点点关注收藏不迷路一、前言在ElasticsearchES的使用中Mapping映射是最核心、最基础的知识点也是新手最容易踩坑的环节。很多人遇到“查询不到数据、聚合失败、字段类型错误”等问题本质都是Mapping配置不当。本文将从基础定义、核心作用、动态映射、静态映射、字段类型、定义方式等维度全方位解析ES Mapping搭配流程图、实战代码让你彻底掌握Mapping的使用技巧避开生产环境90%的字段配置坑。二、基础概念什么是Elasticsearch Mapping2.1 核心定义Mapping可以理解为ES索引的结构化定义规则相当于关系型数据库的表结构Schema。它的核心作用是告诉ES如何索引和存储数据定义索引中字段的名称、数据类型、分词规则、是否可索引等规则。简单总结Mapping 索引的数据结构说明书。2.2 Mapping核心作用定义索引中字段的数据类型text、keyword、date等定义字段是否需要分词、索引、存储控制字段的查询、聚合、排序能力提升数据写入和查询的性能与准确性2.3 Mapping工作流程图写入JSON数据Mapping规则字段类型判定分词规则匹配构建倒排索引数据存储完成查询数据根据Mapping解析查询匹配倒排索引返回正确结果三、Elasticsearch Mapping的两种类型ES提供动态映射和静态映射两种方式适用不同业务场景。3.1 类型1动态映射Dynamic Mapping3.1.1 原理ES根据自动写入的数据自动推断字段类型无需手动定义。写入数据 → ES自动识别字段 → 自动创建Mapping开箱即用适合快速开发、测试环境3.1.2 自动类型推断规则JSON字符串 → 匹配textkeyword类型JSON数字 → 匹配long/integer类型JSON布尔值 → 匹配boolean类型JSON日期字符串 → 匹配date类型JSON对象 → 嵌套类型3.1.3 优缺点优点无需手动配置使用简单缺点容易推断错误如数字被识别为文本、日期识别失败生产环境不推荐3.1.4 动态映射演示自动创建# 直接写入数据ES自动创建Mapping POST /user_index/_doc/1 { name: 张三, age: 20, birthday: 2000-01-01 } # 查看自动生成的Mapping GET /user_index/_mapping3.2 类型2静态映射Static Mapping3.2.1 原理手动提前定义索引的字段类型、分词规则等所有Mapping规则写入数据必须遵循规则。提前定义Mapping → 创建索引 → 写入规范数据生产环境唯一推荐方式保证数据准确性3.2.2 优缺点优点字段类型可控、性能最优、避免自动推断错误缺点需要提前规划字段配置相对复杂3.2.3 静态映射演示手动创建# 创建索引手动定义静态Mapping PUT /user_index { mappings: { properties: { name: { type: text }, // 文本类型支持分词 age: { type: integer }, // 整型 birthday: { type: date }, // 日期类型 address: { type: keyword } // 关键字不分词 } } }四、Elasticsearch 常用核心字段类型Mapping的核心是定义字段类型ES提供丰富的类型以下是生产最常用的6种4.1 核心字段类型清单text文本类型支持分词用于全文检索商品标题、文章内容keyword关键字类型不分词用于精准匹配、聚合、排序手机号、状态、地址integer/long数字整型年龄、ID、数量double/float浮点型价格、经纬度date日期类型创建时间、生日boolean布尔类型是否启用、是否删除object对象类型嵌套数据4.2 关键字段类型对比类型分词适用场景支持聚合text是全文搜索、文章内容不支持keyword否精准查询、排序、聚合支持integer否数字统计支持date否时间范围查询支持五、如何定义Elasticsearch Mapping3种实战方式5.1 方式1创建索引时定义静态Mapping生产首选在创建索引的同时手动定义所有字段规则最标准、最常用。# 完整示例创建商品索引自定义Mapping PUT /product_index { settings: { number_of_shards: 3, // 主分片 number_of_replicas: 1 // 副本 }, mappings: { properties: { product_id: { type: keyword }, // 商品ID不分词 product_name: { // 商品名称分词 type: text, analyzer: ik_max_word // 使用IK分词器 }, price: { type: double }, // 价格 create_time: { type: date }, // 时间 status: { type: keyword } // 状态 } } }5.2 方式2动态映射自动创建仅测试无需提前定义直接写入数据ES自动推断Mapping# 直接写入数据自动生成Mapping POST /test_index/_doc/1 { name: 测试, count: 100 }5.3 方式3新增字段动态更新Mapping已创建的索引可以新增字段但不能修改原有字段类型# 给已有索引新增字段 PUT /product_index/_mapping { properties: { brand: { type: keyword } // 新增品牌字段 } }六、Mapping核心注意事项必看避坑指南6.1 核心规则新手必背已创建的字段类型不能修改一旦定义为text无法改为keyword只能删除索引重建可以随时新增字段动态添加新字段不影响原有数据text类型默认不支持聚合和排序需要聚合必须使用fielddata或搭配keyword子字段日期格式必须规范否则自动映射失败导致查询异常6.2 生产最佳实践禁止自动创建索引提前手动定义静态Mapping文本字段统一使用text keyword组合类型所有需要聚合、排序、精准查询的字段必须用keyword提前规划字段避免后期修改类型七、查看与管理Mapping常用命令7.1 查看索引Mapping# 查看单个索引Mapping GET /product_index/_mapping # 查看所有索引Mapping GET /*/_mapping7.2 删除索引修改Mapping必须删除重建DELETE /product_index八、总结MappingES索引的数据结构定义规则相当于数据库表结构决定数据如何存储和查询。两种类型动态映射自动推断适合测试静态映射手动定义生产环境必用核心字段text全文检索支持分词keyword精准查询、聚合、排序黄金规则字段类型创建后不可修改提前规划静态定义。The End点点关注收藏不迷路