原文:Dynamic Mapping和常见字段类型

版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。

什么是Mapping

  • mapping类似数据库中的schema的定义,作用如下:

    • 定义索引中的字段的名称
    • 定义字段的数据类型,例如字符串、数字、布尔…
    • 字段,倒排索引的相关配置,Analyzed or Not Analyzed,Analyzer
  • mapping会把JSON文档映射成Lucene所需要的扁平格式
  • 一个mapping属于一个索引的type
    • 每个文档都属于一个Type
    • 一个Type有一个Mapping定义
    • 7.0开始,不需要在mapping定义中指定type信息

字段数据类型

  • 简单类型

    • Text/Keyword
    • Date
    • Integer/Floating
    • Boolen
    • ipv4 & ipv6
  • 复杂类型 - 对象和嵌套对象
    • 对象类型/嵌套类型
  • 特殊类型
    • geo_point & geo_shape & percolator

什么是Dynamic Mapping

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

类型的自动识别

JSON类型 Elasticsearch类型
字符串 1、匹配日志格式,设置成Date 2、配置数字设置成float或者long,该选项默认关闭 3、设置为Text,并且增加keyword 子字段
布尔值 boolean
浮点数 float
整数 long
对象 Object
数组 由第一个非空数值的类型所决定
空值 忽略

能否更改Mapping的字段类型

  • 两种情况

    • 新增字段

      • Dynamic 设为true时,一旦有新增字段的文档写入,Mapping也同时被更新
      • Dynamic 设为false时,Mapping 不会被更新,新增字段的数据无法被索引,但是信息会出现在_source中
      • Dynamic设置成Strict,文档写入失败
    • 对已有字段,一旦已经有数据写入,就不再支持修改字段定义
      • Lucene实现的倒排索引,一旦生成后,就不允许修改
    • 如果希望改变字段类型,必须Reindex API,重建索引
  • 原因
    • 如果修改了字段的数据类型,会导致已被索引的属于无法被搜索
    • 但是如果是新增新的字段,就不会有这样的影响

控制Dynamic Mappings

“true” “false” “strict”
文档可索引 YES YES NO
字段可索引 YES NO NO
Mapping被更新 YES NO NO
PUT movies
{
"mappings":{
"_doc":{
"dynamic":"false"
}
}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 当dynamic被设置成false时候,存在新增字段的数据写入,该数据可以被索引,但是新增字段被丢弃
  • 当设置成Strict模式时候,数据写入直接出错

最新文章

  1. android handler ,message消息发送方式
  2. css例子
  3. Android学习笔记——SQLite
  4. AEScrypto WEB and ANDROID (GITHUB)
  5. 夺命雷公狗---DEDECMS----21dedecms按照地区取出电影内容
  6. 为mapcontrol中的图层设置透明度
  7. oracle 日志学习(转载)
  8. hdu 2564 词组缩写
  9. AndroidStudio项目.gitignore文件内容
  10. GIT常用命令(图片版)
  11. iOS-OC、Swift 混编之桥接文件
  12. maven入门(1-1)maven是什么?
  13. Python爬虫入门教程 43-100 百思不得姐APP数据-手机APP爬虫部分
  14. 用Group by分组后,取每组的前3条记录,怎么取?
  15. Docker系列09—Docker的系统资源限制及验证
  16. mac os x 编译spark-2.1.0 for hadoop-2.7.3
  17. 记reinforcement learning double DQNS
  18. MT【305】丹德林双球
  19. Centos 7 安装后设置
  20. 简单实现MySQL数据库的日志审计

热门文章

  1. Ansible环境搭建
  2. RSA和AES工具类
  3. extjs计算两个DateField所间隔的月份(天数)
  4. github上.md的编写
  5. Java使用google身份验证器实现动态口令验证
  6. 老男孩python3.5全栈开发第9期+课件笔记(1-15部全 共125天完整无加密)
  7. mac 外接屏幕切换操作
  8. SpringBoot项目属性配置-第二章
  9. rf-idf的java实现
  10. Menu Items are not showing on Action Bar