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 @ 2020-03-09 15:51  fat_girl_spring  阅读(130)  评论(0编辑  收藏  举报