ElasticSearch 学习笔记 Mapping相关内容概述

ES学习笔记-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
    • Boolean
    • IPv4&IPv6
  • 复杂类型-对象和嵌套对象
    • 对象类型/嵌套类型
  • 特殊类型
    • geo_point & geo_shape/percolator

什么是Dynamic Mapping

在写入文档时候,如果索引不存在,
会自动创建索引

  • Dynamic Mapping的机制,使得我们无需手动定义Mappings。

  • Elasticsearch 会自动根据文档信息,推算出字段的类型

  • 但是有时候会推算的不对,例如地理位置信息

  • 当类型如果设置不对时,会导致一些功能无法正常运行,例如Range 查询
    ElasticSearch 学习笔记 Mapping相关内容概述

类型自动识别规则

ElasticSearch 学习笔记 Mapping相关内容概述

能否更改Mapping 的字段类型

  • 两种情况

    • 新增加字段

      • Dynamic设为true时,一旦有新增字段的文档写入,Mapping也同时被更新

      • Dynamic 设为false,Mapping不会被更新,新增字段的数据无法被索引,但是信息会出现在_source中

      • Dynamic设置成 Strict,文档写入失败

    • 对已有字段,一旦已经有数据写入,就不再支持修改字段定义

      • Lucene 实现的倒排索引,一旦生成后,就不允许修改
    • 如果希望改变字段类型,必须ReindexAPl,重建索引

  • 原因

    • 如果修改了字段的数据类型,会导致已被索引的数据无法被搜索

    • 但是如果是增加新的字段,就不会有这样的影响

控制 Dynamic Mapping

ElasticSearch 学习笔记 Mapping相关内容概述

显式Mapping 设置与常见参数介绍

设置mapping字段常用属性

ElasticSearch 学习笔记 Mapping相关内容概述

analyzer

在索引时和搜索时都应该用于文本字段的分析器(除非被 search_analyzer 覆盖)。默认为默认索引分析器或标准分析器。

boost

分数的倍数,默认1.0,可接受浮点数,可通过设置该值提高该列的相关性计算得分,可以使用查询时该字段携带boost实现相同的效果

index

index-控制当前字段是否被索引。默认为true。如果设置成false,该字段不可被搜索
ElasticSearch 学习笔记 Mapping相关内容概述

index_options

ElasticSearch 学习笔记 Mapping相关内容概述

null_value

ElasticSearch 学习笔记 Mapping相关内容概述

copy_to

ElasticSearch 学习笔记 Mapping相关内容概述