Elasticsearch学习之路(六)_Mapping

本文探讨了Elasticsearch中的Mapping概念,包括Dynamic Mapping、字段数据类型和自动识别。同时,讲解了如何查看和更改Mapping字段类型,以及如何显式定义和定制Mapping策略。对于Elasticsearch后端开发者,了解这些内容至关重要。
摘要由CSDN通过智能技术生成

什么是Mapping

1. Mapping 类似数据库中的Schema的定义,作用如下
	1. 定义索引中字段的名称
	2. 定义字段的数据类型,例如字符串,数字,布尔
	3. 字段,倒排索引的相关配置
2. Mapping会把JSON文档映射成Lucene所需要的扁平格式
3. 一个Mapping属于一个索引的Type
	1. 每个文档都属于一个索引的Type
	2. 一个Type有一个Mapping定义
	3. 7.0开始,不需要在Mapping定义中指定Type信息

什么是Dynamic Mapping

1. 在写入文档的时候,如果索引不存在,会自动创建索引
2. Dynamic Mapping的机制,使得我们无需手动定义Mappings,ES会根据文档信息,推算出自动的类型
3. 但有时候会推算不对,例如地理位置信息
4. 当类型如果设置不对时,会导致一些功能无法正常运行,例如Range查询

字段的数据类型

1. 简单类型
	1. Text/Keyword
	2. Date
	3. Integer/Floating
	4. Boolean
	5. IPV4 & IPV6
2. 复杂类型
	1. 对象类型
	2. 嵌套对象类型
3. 特殊类型
	1. geo_point & geo_shape / percolator

类型的自动识别

image-20210329150630423

查看Mapping

在开发工具里面输入以下命令执行: 
GET /movies/_mapping

响应结果如下:
{
  "movies" : {
    "mappings" : {
      "properties" : {
        "@version" : {
          "type" : "text",
          "fields" : {
            "keyword" : {
              "type" : "keyword",
              "ignore_above" : 256
            }
          }
        },
        "genre" : {
          "type" : "text",
          "fields" : {
            "keyword" : {
              "type" : "keyword",
              "ignore_above" : 256
            }
          }
        },
        "id" : {
          "type" : "text",
          "fields" : {
            "keyword" : {
              "type" : "keyword",
              "ignore_above" : 256
            }
          }
        },
        "title" : {
          "type" : "text",
          "fields" : {
            "keyword" : {
              "type" : "keyword",
              "ignore_above" : 256
            }
          }
        },
        "year" : {
          "type" : "long"
        }
      }
    }
  }
}

能否更改Mapping的字段类型

1. 新增加字段
	1. Dynamic 设为true时,一旦有新增字段的文档写入,Mapping也同时被更新
	2. Dynamic 设为false时,Mapping不会被更新,新增字段的数据无法被索引,但是信息会出现在_scoure中
	3. Dynamic设置为Stict,文档写入失败
2. 对于已有字段,一旦有数据写入,就不再支持修改字段定义
	1. Lucene实现的待排索引,一旦生成后,就不允许修改
3. 如果希望改变字段类型,必须Reindex API,重建索引

原因:
	1. 如果修改了字段的数据类型,会导致已被索引的属于无法被搜索
	2. 但如果是新增的字段,就不会有这样的影响

如何显示的定义一个Mapping

PUT movies
{
  "mappings":{
    // define your mappings here
  }
}

自定义Mapping的一些建议

1. 可以参考API手册,纯手写
2. 为了减少输入的工作量,减少出错概率,可以依照以下步骤:
	1. 创建一个临时的Index,写入一些样本数据
	2. 通过访问Mapping API获得该临时文件的动态Mapping定义
	3. 修改后用,使用该配置创建你的索引
	4. 删除临时索引

更多内容欢迎关注我的个人公众号“韩哥有话说”,100G人工智能学习资料,大量后端学习资料等你来拿。

韩哥有话说

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值