ElasticSearch 动态映射与静态映射_08
映射就是 Mapping,它用来定义一个文档以及文档所包含的字段该如何被存储和索引。所以,它其实有点类似于关系型数据库中表的定义。
映射分类
动态映射
顾名思义,就是自动创建出来的映射。es 根据存入的文档,自动分析出来文档中字段的类型以及存储方式,这种就是动态映射。
举一个简单例子,新建一个索引,然后查看索引信息:
在这里插入代码片
在创建好的索引信息中,可以看到,mappings 为空,这个 mappings 中保存的就是映射信息。
现在我们向索引中添加一个文档,如下:
PUT blog/_doc/1
{"title":"1111","date":"2020-11-11"
}
文档添加成功后,就会自动生成 Mappings:
可以看到,date 字段的类型为 date,title 的类型有两个,text 和 keyword。
默认情况下,文档中如果新增了字段,mappings 中也会自动新增进来。
有的时候,如果希望新增字段时,能够抛出异常来提醒开发者,这个可以通过 mappings 中 dynamic 属性来配置。
dynamic 属性有三种取值:
true,默认即此。自动添加新字段。
false,忽略新字段。
strict,严格模式,发现新字段会抛出异常。
具体配置方式如下,创建索引时指定 mappings(这其实就是静态映射):
PUT blog
{"mappings": {"dynamic":"strict","properties": {"title":{"type": "text"},"age":{"type":"long"}}}
}
然后向 blog 中索引中添加数据:
PUT blog/_doc/2
{"title":"1111","date":"2020-11-11","age":99
}
在添加的文档中,多出了一个 date 字段,而该字段没有预定义,所以这个添加操作就会报错:
{"error" : {"root_cause" : [{"type" : "strict_dynamic_mapping_exception","reason" : "mapping set to strict, dynamic introduction of [date] within [_doc] is not allowed"}],"type" : "strict_dynamic_mapping_exception","reason" : "mapping set to strict, dynamic introduction of [date] within [_doc] is not allowed"},"status" : 400
}
动态映射还有一个日期检测的问题。
例如新建一个索引,然后添加一个含有日期的文档,如下:
PUT blog/_doc/1
{"remark":"2020-11-11"
}
添加成功后,remark 字段会被推断是一个日期类型。
此时,remark 字段就无法存储其他类型了。
PUT blog/_doc/1
{"remark":"javaboy"
}
此时报错如下:
{"error" : {"root_cause" : [{"type" : "mapper_parsing_exception","reason" : "failed to parse field [remark] of type [date] in document with id '1'. Preview of field's value: 'javaboy'"}],"type" : "mapper_parsing_exception","reason" : "failed to parse field [remark] of type [date] in document with id '1'. Preview of field's value: 'javaboy'","caused_by" : {"type" : "illegal_argument_exception","reason" : "failed to parse date field [javaboy] with format [strict_date_optional_time||epoch_millis]","caused_by" : {"type" : "date_time_parse_exception","reason" : "Failed to parse with all enclosed parsers"}}},"status" : 400
}
要解决这个问题,可以使用静态映射,即在索引定义时,将 remark 指定为 text 类型。也可以关闭日期检测。
PUT blog
{"mappings": {"date_detection": false}
}
此时日期类型就回当成文本来处理。
类型推断
es 中动态映射类型推断方式如下:
json中的数据 | 自动推断出来的数据类型 |
---|---|
null | 没有字段被添加 |
true/false | boolean |
浮点类型 | float |
数字 | long |
json对象 | object |
string | text/keyword/date/double/long |
ElasticSearch 动态映射与静态映射_08相关推荐
- ElasticSearch 动态映射和静态映射,以及四种字段类型
文章目录 1.ElasticSearch 映射 1.1 映射分类 1.2 类型推断 2.ElasticSearch 字段类型 2.1 核心类型 2.1.1 字符串类型 2.1.2 数字类型 2.1.3 ...
- 字符设备驱动高级篇5——静态映射表、动态映射结构体方式操作寄存器
以下内容源于朱有鹏<物联网大讲堂>课程的学习整理,如有侵权,请告知删除. 一.静态映射表建立过程分析 1.建立映射表的三个关键部分 (1)映射表描述 具体物理地址和虚拟地址的值相关的宏定义 ...
- IO静态映射和动态映射
1:静态映射方法的特点: 内核移植时以代码的形式硬编码,如果要更改必须改源代码后重新编译内核在内核启动时建立静态映射表,到内核关机时销毁,中间一直有效对于移植好的内核,你用不用他都在那里 2:动态映射 ...
- Elasticsearch 动态映射——自动检测
ES中有一个非常重要的特性--动态映射,即索引文档前不需要创建索引.类型等信息,在索引的同时会自动完成索引.类型.映射的创建. 那么什么是映射呢?映射就是描述字段的类型.如何进行分析.如何进行索引等内 ...
- Linux内核访问外设I/O--动态映射(ioremap)和静态映射(map_desc)
本篇文章主要介绍了"Linux内核访问外设I/O--动态映射(ioremap)和静态映射(map_desc)",主要涉及到Linux内核访问外设I/O--动态映射(ioremap) ...
- 字符设备驱动基础篇5——驱动如何操控硬件(动静态映射操作LED)
以下内容源于朱有鹏嵌入式课程的学习,,如有侵权,请告知删除. 参考资料:http://www.cnblogs.com/biaohc/p/6575074.html 这里的映射,是指物理地址和虚拟地址的对 ...
- Linux内核访问外设I/O--动态映射(ioremap)和静态映射(map_desc) (转载)
[转](转)Linux内核访问外设I/O资源的方式-静态映射(map_desc)方式 Linux内核访问外设I/O资源的方式 Author: Dongas Date: 08-08-02 我们知道默认外 ...
- ElasticSearch系列——倒排索引、删除映射类型、打分机制、配置文件、常见错误
文章目录 1 倒排索引 2 删除映射类型 一 前言 二 什么是映射类型? 三 为什么要删除映射类型? 四 映射类型的替代方法 4.1 将映射类型分开存储在索引中 4.2 自定义类型字段回到顶部 五 没 ...
- 用iptables做IP的静态映射
实现功能是将内网服务器192.168.1.1和192.168.1.2应该已经可以通过ip地址1.1.1.2和1.1.1.3访问了 #下面就是nat表了,这个绝对不要改,除非你很明白它们的作用, #达到 ...
最新文章
- Skype for Business Server 2015-06-持久聊天服务器-3-配置
- github开源项目分享
- nginx限流健康检查
- 修复IE下相对容器中绝对定位Bug
- 计算机专业汇报与接口,计算机接口设计实验总结.doc
- X264 输出的统计值的含义(X264 Stats Output)
- 解决WORD无法多次编辑保存
- javascript遍历对象属性和方法
- MyBatis源码阅读(一) --- 源码阅读环境搭建
- 测屏幕坏点 android,手机屏幕坏点检测方法有哪些【详细介绍】
- 用MATLAB实现一个数字图像加密解密系统
- 开头的单词_学Z字母本义和引申义,初高中Z开头的单词几分钟全部轻松记忆!...
- linux桌面网络连接是个X,Xbrowser如何运行多个X桌面
- 拼多多视频直播回放视频下载软件方法分享地瓜网络技术
- 投屏电脑怎么操作?投屏电脑最常用的4种方式
- AQSW公司OA系统需求分析
- 1. python爬虫
- VUE 引用腾讯地图
- 开源RISC-V处理器(蜂鸟E203)学习(三)低成本方案,成功运行hello word程序
- 百度统计 - 学习/实践