Dynamic Mapping和常见字段类型
版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。
Dynamic Mapping和常见字段类型
什么是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模式时候,数据写入直接出错
Dynamic Mapping和常见字段类型的更多相关文章
- ElasticSearch(五):Mapping和常见字段类型
ElasticSearch(五):Mapping和常见字段类型 学习课程链接<Elasticsearch核心技术与实战> 什么是Mapping Mapping类似数据库中的schema的定 ...
- elasticsearch入门使用(二) Mapping + field type字段类型
Elasticsearch Reference [6.2] » Mapping 参考官方英文文档 https://www.elastic.co/guide/en/elasticsearch/refer ...
- ElasticSearch Mapping中的字段类型
1)string: 默认会被分词 2)数字类型主要如下几种: long:64位存储 integer:32位存储 short:16位存储 byte:8位存储 double:64位双精度存储 f ...
- 转载:Oracle常见字段类型
转载节选自:https://bbs.csdn.net/topics/220059184 数据类型 参数 描述 char(n) n=1 to 2000字节 定长字符串,n字节长,如果不指定长度,缺省为1 ...
- Elasticsearch:Dynamic mapping
Elasticsearch最重要的功能之一是它试图摆脱你的方式,让你尽快开始探索你的数据. 要索引文档,您不必首先创建索引,定义映射类型和定义字段 - 您只需索引文档,那么index,type和fie ...
- mapping 详解5(dynamic mapping)
概述 在使用 ES 的时,我们不需要事先定义好映射设置就可以直接向索引中导入文档.ES 可以自动实现每个字段的类型检测,并进行 mapping 设置,这个过程就叫动态映射(dynamic mappin ...
- ES 12 - 配置使用Elasticsearch的动态映射 (dynamic mapping)
目录 1 动态映射(dynamic mapping) 1.1 什么是动态映射 1.2 体验动态映射 1.3 搜索结果不一致的原因分析 2 开启dynamic mapping策略 2.1 约束策略 2. ...
- 65.dynamic mapping
主要知识点: 理解dynamic mapping 定制dynamic mapping 更改default dynamic mapping 一.理解dynamic mapping 1.基本概念 ...
- ElasticSearch7.3 学习之Mapping核心数据类型及dynamic mapping
1.mapping的核心数据类型以及dynamic mapping 1.1 核心的数据类型 string :text and keyword,byte,short,integer,long,float ...
随机推荐
- Python---进阶---文件操作---获取文件夹下所有文件的数量和大小
一.####编写一个程序,统计当前目录下每个文件类型的文件数 ####思路: - 打开当前的文件夹 - 获取到当前文件夹下面所有的文件 - 处理我们当前的文件夹下面可能有文件夹的情况(也打印出来) - ...
- UVA 315 :Network (无向图求割顶)
题目链接 题意:求所给无向图中一共有多少个割顶 用的lrj训练指南P314的模板 #include<bits/stdc++.h> using namespace std; typedef ...
- 拓展KMP以及模板
废话不多说,上模板 #include<bits/stdc++.h> ; int Next[maxn], extend[maxn], moL, strL;///Next数组.extend数组 ...
- jsoncpp 源码编译与简单使用
******************************************************标准C++实现jsoncpp 源码使用编译(VC2012 MFC)(Qt5.2 Widget ...
- 大数据笔记(一)——Hadoop的起源与背景知识
一.大数据的5个特征(IBM提出): Volume(大量) Velocity(高速) Variety(多样) Value(价值) Varacity(真实性) 二.OLTP与OLAP 1.OLTP:联机 ...
- DRF中的视图集的使用
1.说明:DRF框架中的视图集: 在drf开发接口中,使用GenericAPIView和视图扩展类结合起来完成接口功能是一件很常见的事情,所以,drf的作者帮我们提前把 GenericAPIView ...
- VMware 虚拟化编程(2) — 虚拟磁盘文件类型详解
目录 目录 前文列表 虚拟磁盘文件 VMDK 用户可以创建的虚拟磁盘类型 VixDiskLib 中支持的虚拟磁盘类型 虚拟机文件类型 前文列表 VMware 虚拟化编程(1) - VMDK/VDDK/ ...
- 接口自动化之提取响应结果(raw、json)
做接口测试时,我们一般会取得响应结果的部分值,来与预期结果对比,做断言 目录 1.响应结果类型 2.json响应结果的提取 3.raw响应结果的提取 1.响应结果类型 通过fiddler的respon ...
- js中parseInt()与parseFloat(),Number(),Boolean(),String()转换
js将字符串转数值的方法主要有三种 转换函数.强制类型转换.利用js变量弱类型转换. 1. 转换函数: js提供了parseInt()和parseFloat()两个转换函数.前者把值转换成整数,后者把 ...
- 16/7/8_PHP-字符串介绍
不知道为什么慕课网还这个都要介绍.不过还是一个新的知识点. PHP开发中,我们遇到最多的可能就是字符串. 字符串变量用于包含字符串的值. 一个字符串 通过下面的3种方法来定义: 1.单引号2.双引号3 ...