news 2026/4/24 9:50:11

Elasticsearch核心:Mapping映射全解析+定义实战教程

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Elasticsearch核心:Mapping映射全解析+定义实战教程

Elasticsearch核心:Mapping映射全解析+定义实战教程

    • 一、前言
    • 二、基础概念:什么是Elasticsearch Mapping?
      • 2.1 核心定义
      • 2.2 Mapping核心作用
      • 2.3 Mapping工作流程图
    • 三、Elasticsearch Mapping的两种类型
      • 3.1 类型1:动态映射(Dynamic Mapping)
        • 3.1.1 原理
        • 3.1.2 自动类型推断规则
        • 3.1.3 优缺点
        • 3.1.4 动态映射演示(自动创建)
      • 3.2 类型2:静态映射(Static Mapping)
        • 3.2.1 原理
        • 3.2.2 优缺点
        • 3.2.3 静态映射演示(手动创建)
    • 四、Elasticsearch 常用核心字段类型
      • 4.1 核心字段类型清单
      • 4.2 关键字段类型对比
    • 五、如何定义Elasticsearch Mapping?(3种实战方式)
      • 5.1 方式1:创建索引时定义静态Mapping(生产首选)
      • 5.2 方式2:动态映射(自动创建,仅测试)
      • 5.3 方式3:新增字段(动态更新Mapping)
    • 六、Mapping核心注意事项(必看,避坑指南)
      • 6.1 核心规则(新手必背)
      • 6.2 生产最佳实践
    • 七、查看与管理Mapping常用命令
      • 7.1 查看索引Mapping
      • 7.2 删除索引(修改Mapping必须删除重建)
    • 八、总结

🌺The Begin🌺点点关注,收藏不迷路🌺

一、前言

在Elasticsearch(ES)的使用中,Mapping映射是最核心、最基础的知识点,也是新手最容易踩坑的环节。很多人遇到“查询不到数据、聚合失败、字段类型错误”等问题,本质都是Mapping配置不当。

本文将从基础定义、核心作用、动态映射、静态映射、字段类型、定义方式等维度,全方位解析ES Mapping,搭配流程图、实战代码,让你彻底掌握Mapping的使用技巧,避开生产环境90%的字段配置坑。

二、基础概念:什么是Elasticsearch Mapping?

2.1 核心定义

  1. Mapping:可以理解为ES索引的结构化定义规则,相当于关系型数据库的表结构(Schema)
  2. 它的核心作用是:告诉ES如何索引和存储数据,定义索引中字段的名称、数据类型、分词规则、是否可索引等规则。
  3. 简单总结:Mapping = 索引的数据结构说明书

2.2 Mapping核心作用

  1. 定义索引中字段的数据类型(text、keyword、date等)
  2. 定义字段是否需要分词、索引、存储
  3. 控制字段的查询、聚合、排序能力
  4. 提升数据写入和查询的性能与准确性

2.3 Mapping工作流程图

写入JSON数据

Mapping规则

字段类型判定

分词规则匹配

构建倒排索引

数据存储完成

查询数据

根据Mapping解析查询

匹配倒排索引

返回正确结果


三、Elasticsearch Mapping的两种类型

ES提供动态映射静态映射两种方式,适用不同业务场景。

3.1 类型1:动态映射(Dynamic Mapping)

3.1.1 原理

ES根据自动写入的数据自动推断字段类型,无需手动定义。

  • 写入数据 → ES自动识别字段 → 自动创建Mapping
  • 开箱即用,适合快速开发、测试环境
3.1.2 自动类型推断规则
  1. JSON字符串 → 匹配text+keyword类型
  2. JSON数字 → 匹配long/integer类型
  3. JSON布尔值 → 匹配boolean类型
  4. JSON日期字符串 → 匹配date类型
  5. 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/_mapping

3.2 类型2:静态映射(Static Mapping)

3.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 核心字段类型清单

  1. text:文本类型,支持分词,用于全文检索(商品标题、文章内容)
  2. keyword:关键字类型,不分词,用于精准匹配、聚合、排序(手机号、状态、地址)
  3. integer/long:数字整型(年龄、ID、数量)
  4. double/float:浮点型(价格、经纬度)
  5. date:日期类型(创建时间、生日)
  6. boolean:布尔类型(是否启用、是否删除)
  7. object:对象类型(嵌套数据)

4.2 关键字段类型对比

类型分词适用场景支持聚合
text全文搜索、文章内容不支持
keyword精准查询、排序、聚合支持
integer数字统计支持
date时间范围查询支持

五、如何定义Elasticsearch Mapping?(3种实战方式)

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 核心规则(新手必背)

  1. 已创建的字段,类型不能修改
    • 一旦定义为text,无法改为keyword,只能删除索引重建
  2. 可以随时新增字段
    • 动态添加新字段,不影响原有数据
  3. text类型默认不支持聚合和排序
    • 需要聚合必须使用fielddata或搭配keyword子字段
  4. 日期格式必须规范
    • 否则自动映射失败,导致查询异常

6.2 生产最佳实践

  1. 禁止自动创建索引,提前手动定义静态Mapping
  2. 文本字段统一使用:text + keyword组合类型
  3. 所有需要聚合、排序、精准查询的字段,必须用keyword
  4. 提前规划字段,避免后期修改类型

七、查看与管理Mapping常用命令

7.1 查看索引Mapping

# 查看单个索引Mapping GET /product_index/_mapping # 查看所有索引Mapping GET /*/_mapping

7.2 删除索引(修改Mapping必须删除重建)

DELETE /product_index

八、总结

  1. Mapping:ES索引的数据结构定义规则,相当于数据库表结构,决定数据如何存储和查询。
  2. 两种类型:
    • 动态映射:自动推断,适合测试
    • 静态映射:手动定义,生产环境必用
  3. 核心字段:
    • text:全文检索,支持分词
    • keyword:精准查询、聚合、排序
  4. 黄金规则:字段类型创建后不可修改,提前规划,静态定义


🌺The End🌺点点关注,收藏不迷路🌺
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/22 19:46:00

手把手教你用Matlab FDA工具设计FIR滤波器,并导出Verilog代码到Vivado仿真

从Matlab到FPGA:FIR滤波器设计全流程实战指南 在数字信号处理领域,FIR滤波器因其稳定性、线性相位特性而广受欢迎。本文将带您完整走通从Matlab设计到FPGA实现的整个流程,涵盖低通和带通两种典型滤波器设计场景。 1. 设计准备与环境搭建 工欲…

作者头像 李华
网站建设 2026/4/22 19:44:33

获取当前路径的绝对路径

获取当前路径的绝对路径dir_path os.path.dirname(os.path.abspath(__file__)) # 获取当前路径的绝对路径filedirj dir_path \\原始数据\\ # 获取原始数据下文件绝对路径

作者头像 李华
网站建设 2026/4/22 19:42:55

树莓派4B与STM32串口通信实战:从GPIO引脚配置到Minicom调试

1. 硬件连接与引脚配置 树莓派4B与STM32的串口通信,第一步就是搞定硬件连接。很多新手容易在这里栽跟头,比如把TXD和RXD接反了,或者忘记共地。我刚开始玩嵌入式的时候,就因为这个简单的接线问题折腾了一整天。 树莓派4B的GPIO引脚…

作者头像 李华