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"
}

 

 

 

 

posted @   fat_girl_spring  阅读(130)  评论(0编辑  收藏  举报
编辑推荐:
· 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 让容器管理更轻松!
点击右上角即可分享
微信分享提示