es Dynamic Mapping

2020-04-13  本文已影响0人  7赢月

介绍

本章介绍es中的Dynamic Mapping,主要介绍什么是Dynamic Mapping,以及Dynamic Mapping的控制,还是会以demo的例子进行示例。

补充知识

字段的数据类型


什么是Mapping


什么是Dynamic Mapping


类型的自动识别

json类型 es
字符创 匹配日期时:data;匹配数字时,为float或long(默认关闭);会被设置为text并且增加keyword
布尔值 boolean
浮点数 float
整数 long
对象 Ob
数组 有第一个非空数值的类型锁决定
整数 忽略

Mapping是否可更改

实例

{
  "name":"Li",
  "loginDate":"2020-04-13T10:29:48.103Z"
}

先插入一段数据看看Mapping为我们干了啥

GET mapping_test/_mapping
返回结果

可以看到Name被Mapping成了text,而loginDate则被Mapping成了date类型


删除这个索引,我们重新再建一个看看

PUT mapping_test/_doc/1
{
    "uid" : "123",
    "isVip" : false,
    "isAdmin": "true",
    "age":19,
    "heigh":180
}
返回结果

我们可以看到 isAdmin因为置为“true”被Mapping成text类型,isVip得到了正常的boolean类型


#默认Mapping支持dynamic,写入的文档中加入新的字段
PUT dynamic_mapping_test/_doc/1
{
  "newField":"someValue"
}

POST dynamic_mapping_test/_search
{
  "query":{
    "match":{
      "newField":"someValue"
    }
  }
}

通过搜索我们能看到的是


返回结果

改新增字段能被搜索,也能出现在_source中


接下来我们修改dynamic为false,再新增字段看看

PUT dynamic_mapping_test/_mapping
{
  "dynamic": false
}
PUT dynamic_mapping_test/_doc/10
{
  "anotherField":"someValue"
}
POST dynamic_mapping_test/_search
{
  "query":{
    "match":{
      "anotherField":"someValue"
    }
  }
}
返回结果

这个就不能被搜索到了


我们再设置dynamic为strict,再新增字段看看

PUT dynamic_mapping_test/_mapping
{
  "dynamic": "strict"
}
PUT dynamic_mapping_test/_doc/12
{
  "lastField":"value"
}
返回结果

这时候再插入的时候已经报错了


总结

本章通过实例介绍了什么是Dynamic Mapping和Dynamic Mapping的控制

引用

https://time.geekbang.org/course/detail/197-105684

上一篇 下一篇

猜你喜欢

热点阅读