原文: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模式时候,数据写入直接出错

Dynamic Mapping和常见字段类型的更多相关文章

  1. ElasticSearch(五):Mapping和常见字段类型

    ElasticSearch(五):Mapping和常见字段类型 学习课程链接<Elasticsearch核心技术与实战> 什么是Mapping Mapping类似数据库中的schema的定 ...

  2. elasticsearch入门使用(二) Mapping + field type字段类型

    Elasticsearch Reference [6.2] » Mapping 参考官方英文文档 https://www.elastic.co/guide/en/elasticsearch/refer ...

  3. ElasticSearch Mapping中的字段类型

    1)string: 默认会被分词 2)数字类型主要如下几种: long:64位存储  integer:32位存储  short:16位存储  byte:8位存储  double:64位双精度存储  f ...

  4. 转载:Oracle常见字段类型

    转载节选自:https://bbs.csdn.net/topics/220059184 数据类型 参数 描述 char(n) n=1 to 2000字节 定长字符串,n字节长,如果不指定长度,缺省为1 ...

  5. Elasticsearch:Dynamic mapping

    Elasticsearch最重要的功能之一是它试图摆脱你的方式,让你尽快开始探索你的数据. 要索引文档,您不必首先创建索引,定义映射类型和定义字段 - 您只需索引文档,那么index,type和fie ...

  6. mapping 详解5(dynamic mapping)

    概述 在使用 ES 的时,我们不需要事先定义好映射设置就可以直接向索引中导入文档.ES 可以自动实现每个字段的类型检测,并进行 mapping 设置,这个过程就叫动态映射(dynamic mappin ...

  7. ES 12 - 配置使用Elasticsearch的动态映射 (dynamic mapping)

    目录 1 动态映射(dynamic mapping) 1.1 什么是动态映射 1.2 体验动态映射 1.3 搜索结果不一致的原因分析 2 开启dynamic mapping策略 2.1 约束策略 2. ...

  8. 65.dynamic mapping

    主要知识点: 理解dynamic mapping 定制dynamic mapping 更改default dynamic mapping     一.理解dynamic mapping 1.基本概念 ...

  9. ElasticSearch7.3 学习之Mapping核心数据类型及dynamic mapping

    1.mapping的核心数据类型以及dynamic mapping 1.1 核心的数据类型 string :text and keyword,byte,short,integer,long,float ...

随机推荐

  1. vue2.0发布

    http://blog.csdn.net/xuefeiliuyuxiu/article/details/78970815

  2. CSS3——制作人物走路的小动画

    一个很简单的小动画,但是还挺有意思的,就是找这种图片很麻烦,我这里把我找的一张图片贴上来,这张图片是我在网上找的,又改了背景色和大小. <!DOCTYPE html> <html l ...

  3. 使用vue 3.0 初始化vue脚手架

    vue-cli3.0安装 如果你事先已经全局安装了旧版本的vue-cli(1.x 或 2.x),你需要先卸载它: npm uninstall vue-cli -g 安装 npm install -g ...

  4. 如何在ASP.NET Core中上传超大文件

    HTML部分 <%@PageLanguage="C#"AutoEventWireup="true"CodeBehind="index.aspx. ...

  5. Java——常用类(基础类型数据包装类)

    [包装类]   包装类(如Integer.Double等)这些类封装了一个相应的基础数据类型数值,并为其提供了一系列操作.     例如:java.lang.Integer类提供了以下构造方法:   ...

  6. [洛谷3934]P3934 Nephren Ruq Insania题解

    先放个奈芙莲 解法 看到这种题目就知道是欧拉降幂,然后根据某玄学证明,递归欧拉降幂从l到r不会超过\(\Theta(log_n)\),所以直接递归解决,然后区间修改直接树状数组维护一下 然后就A了 代 ...

  7. 关联规则挖掘--Apriori算法

  8. package.json保存

    # 确保已经进入项目目录 # 确定已经有 package.json,没有就通过 npm init # 创建,直接一路回车就好,后面再来详细说里面的内容. # 安装 webpack 依赖 npm ins ...

  9. Markdown Memo(memorandum)

    居中 html语法 <center>居中</center> 左对齐 <p align="left">左对齐</p> 右对齐 < ...

  10. (转)用C#实现实现简单的 Ping 的功能,用于测试网络是否已经连通

    本文转载自:http://blog.csdn.net/xiamin/archive/2009/02/14/3889696.aspx 用C#实现实现简单的 Ping 的功能,用于测试网络是否已经联通 1 ...