Elasticsearch之Mapping
什么是Mapping
Mapping是类似于数据库中的表结构定义,主要作用如下:
定义索引中的字段名
定义字段类型,比如数值型、浮点型、布尔型等
定义倒排索引相关的设置,比如是否索引、记录position等
Mapping会把Json文档映射成Lucene所需要的扁平格式
一个Mapping属于一个索引的Type
每个文档都属于一个Type
一个Type有一个Mapping的定义
7.0开始,不需要在Mapping定义中指定Type信息
字段的数据类型
简单类型
Text,keyword,date,long,double,Boolean,ip
支持json层次的数据类型
object,nested
特殊类型
geo_point&geo_shape/completion
什么是Dynamic Mapping
在写入文档时,如果索引不存在,会自动创建索引
Dynamic Mapping的机制,使得我们无需手动定义Mappings。Elasticsearch会自动根据文档信息推算出字段类型,但是有时候推算的不对。
当类型不对时,会导致一些功能无法正常使用
能否更改Mapping的字段类型
两种情况
新增加字段
Dynamic设为true时,一但有新增字段的文档写入,Mapping也同时被更新
Dynamic设为false时,Mapping不会被更新,新增字段的数据无法被索引,但是信息会出现在_source中
Dynamic设置为Strict,文档写入失败
PUT dynamic_mapping_test/_doc/1
{
"newfiled":"sonevalue"
}
PUT dynamic_mapping_test/_doc/10
{
"newfiled":"sonevalue",
"truefiled":"somevalue"
}
GET dynamic_mapping_test/_search
{
"query":{
"match":{
"truefiled":"somevalue"
}
}
}
PUT dynamic_mapping_test/_mapping
{
"dynamic":false
}
PUT dynamic_mapping_test/_doc/10
{
"newfiled":"sonevalue",
"abotherfiled":"somevalue"
}
GET dynamic_mapping_test/_search
{
"query":{
"match":{
"abotherfiled":"somevalue"
}
}
}
PUT dynamic_mapping_test/_mapping
{
"dynamic":"strict"
}
PUT dynamic_mapping_test/_doc/12
{
"lastfiled":"somevalue"
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!