欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

ElasticSearch Mapping

程序员文章站 2022-05-23 13:25:23
...

一、Mapping介绍

1)什么是Mapping ?

ElasticSearch Mapping
备注:7.0版本后ES,是通过自动识别字段type

2)字段类型

ElasticSearch Mapping
备注:相比其它存储,多了IP、坐标等特殊的格式

3)什么是Dynamic Mapping ?

ElasticSearch Mapping
备注:Dynamic Mapping ,设置不恰当可能导致字段无法被索引。

4)Mapping 类型的自动识别

ElasticSearch Mapping

5)通过设置dynamic控制Dynamic Mapping

ElasticSearch Mapping

6) 能否修改Mapping字段的类型

ElasticSearch Mapping

二、Demo

7)常规Mapping添加删除

#写入文档,查看 Mapping

PUT mapping_test/_doc/1
{
  "firstName":"Chan",
  "lastName": "Jackie",
  "loginDate":"2018-07-24T10:29:48.103Z"
}

结果:
ElasticSearch Mapping
#查看 Mapping文件

GET mapping_test/_mapping

结果:
ElasticSearch Mapping
#Delete index

DELETE mapping_test

ElasticSearch Mapping

8)dynamic mapping,推断字段的类型

#新建index 和字段

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

#查看 Dynamic Mapping

GET mapping_test/_mapping

结果:
ElasticSearch Mapping

9)dynamic 设置为false 情况

#默认Mapping支持dynamic,写入的文档中加入新的字段

PUT dynamic_mapping_test/_doc/1
{
  "newField":"someValue"
}

#该字段可以被搜索,数据也在_source中出现

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

结果:
ElasticSearch Mapping

#修改为dynamic false

PUT dynamic_mapping_test/_mapping
{
  "dynamic": false
}

#新增 anotherField

PUT dynamic_mapping_test/_doc/10
{
  "anotherField":"someValue"
}

#该字段不可以被搜索,因为dynamic已经被设置为false

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

结果:
ElasticSearch Mapping
备注:上面结果可以看出, 没有在索引中到该value 。

#我们通过主键id看一下, 我们新插入的值到底是否存在

get dynamic_mapping_test/_doc/10

结果:
ElasticSearch Mapping
备注:上面结果说明,这个"anotherField":“someValue” 是有成功插入的, 验证了:dynamic已经被设置为false,新创建的字段无法被索引。

10)dynamic 设置为strict情况

#修改为strict

PUT dynamic_mapping_test/_mapping
{
  "dynamic": "strict"
}

#写入数据出错,HTTP Code 400

PUT dynamic_mapping_test/_doc/12
{
  "lastField":"value"
}

结果:
ElasticSearch Mapping
备注:从上图可以看出,创建新字段失败,提示信息中已告知是dynamic 设置为strict导致。

三、总结

  • dynamic 设置一般为默认true,可以满足业务需求。
  • dynamic 设置为false 情况,可以省去索引空间使用,节约空间但会导致新增的字段无法被索引。
  • dynamic 设置为strict ,如果你的ES对应的index
    中字段不允许新增,可以通过这种方式来实现,但前期需要将所有字段初始化好。
  • dynamic 设置好以后,不允许修改, 如果要修改只能重构索引。