Elasticsearch 之Mapping设置

mapping简介

  • mapping 类似数据库中的表结构定义,主要作用如下:
    (1)定义Index下的字段名(Field Name)
    (2)定义字段的类型。比如数值型、字符串型、布尔型等
    (3)定义倒排索引相关的配置。比如是否索引、记录position等
  • 获取一个索引的mapping
    在这里插入图片描述

自定义mapping

  • 自定义mapping的api 如下:

    PUT work_index
    {
      "mappings": { //mapping关键词
        "doc":{ //type名称,直接默认写doc不变
          "properties": { //在下面开始定义索引里的字段名称和类型
            "name":{
              "type": "text" //字段类型
            },
            "gender":{
              "type": "integer"
            },
            "job":{
              "type": "keyword"
            }
          }
        }
      }
    }
    

    示例如图:
    在这里插入图片描述

  • mapping中的字段类型一旦设定后,禁止直接修改,原因为:
    Lucene实现的倒排索引生成后不允许修改
    重新建立的新索引,然后做reindex操作,把所有的文档重新导入到新的文档

  • 允许新增字段,通过dynamic参数来控制字段的新增
    true(默认)允许自动新增字段;false 不允许自动新增字段,但文档可以正常的写入,但无法对字段进行查询等操作;strict 稳定不能写入,报错
    在这里插入图片描述
    在这里插入图片描述

  • copy_to 将该字段复制到目标字段,实现类似_all的作用;不会出现在_source中,只用来搜索

    在这里插入图片描述
    在这里插入图片描述

  • index 控制当前字段是否索引,默认为true,记录索引;false不记录,即不可搜索,不存索引可以节省大量的磁盘和内存空间
    在这里插入图片描述

  • index_options 用于控制倒排索引记录的内容,有如下4种配置
    (1)docs 只记录 doc id
    (2)freqs 记录doc id 和 term frequencies
    (3)positions 记录doc id、term frequencies 和 term position
    (4)offsets 记录doc id、term frequencies、 term position 和 character offsets
    text 类型默认配置为 positions,其他默认为 docs
    记录内容越多,占用空间越大
    设置如下:
    在这里插入图片描述

  • null_value 当字段遇到null值时的处理策略,默认为null,即空值,此时es会忽略该值。可以通过设定该值来设定字段的默认值
    在这里插入图片描述
    更多自定义参数可查看官方文档 — Mapping

数据类型

  • 核心数据类型
    字符串型 text、keyword
    数值型 long、integer、short、byte、double、float、half_float、scaled_float
    日期类型 date
    布尔类型 boolean
    二进制类型 binary
    范围类型 integer_range、float_range、long_range、double_range、date_range
    如果清楚知道字段要设置的类型,最好作为选择,比如,float 比double可以节省近50%的存储空间

  • 复杂数据类型
    数组类型 array
    对象类型 object
    嵌套类型 nested object (与object不同是此类型会被特殊处理,文档不会和父文档混在一起)

  • 地理位置数据类型
    geo_point
    geo_shape

  • 专用类型
    记录ip地址:ip
    实现自动补全:completion
    记录分词数:token_count
    记录字符串hash值:murmur3
    percolator
    父子查询:join

  • 多字段特性multi-fields
    允许对同一个字段采用不同的配置,比如分词,常见例子如 对人名实现拼音搜索,只需要在人名中新增一个子字段为pinyin即可(要安装文字转拼音插件)

    PUT multi_index
    {
      "mappings": {
        "doc": {
          "properties": {
            "name": {
              "type": "keyword",
              "fields": {
                "pinyin":{
                  "type": "text",
                  "analyzer": "pinyin"
                }
              }
            }
          }
        }
      }
    }
    

dynamic mapping

  • es可以自动识别文档字段类型,从而降低用户使用成本,如下所示:
    在这里插入图片描述
  • es是依靠JSON文档的字段类型来实现自动识别字段类型,支持的类型如下:
JSON类型es类型
null忽略
booleanboolean
浮点类型float
整数long
objectobject
array由第一个非null值的类型决定
string匹配为日期则设为date类型(默认开启);匹配为数字的话设为float或long类型(默认关闭);设为text类型,并附带keyword的子字段
  • 日期的自动识别可以自行设置日期格式,以满足各种要求
    默认是[“strict_date_optional_time”,“yyy/MM/dd HH:mm:ss Z||yyyy/MM/dd Z”]
    strict_date_optional_time是ISO datetime的格式
    dynamic_date_formats 可以自定义日期类型
    date_detection 可以关闭日期自动识别的机制
    在这里插入图片描述
  • 字符串的数字时,默认是不会自动识别为整型,因为字符串中出现数字是完全合理的
  • numeric_detection 可以开启字符串中数字的自动识别
    在这里插入图片描述

dynamic template

允许根据es自动识别的数据类型、字段名等来动态设定字段类型,可以实现如下效果:
所有字符串类型都设定为 keyword类型,即默认不分词
所有以message开头的字段都设定为text类型,即分词
所有以long_开头的字段都设定为long类型
所有自动匹配为double类型的都设定为float类型,节省空间

PUT my_index
{
  "mappings": {
    "doc":{
      "dynamic_templates":[{ //数组,可指定多个匹配规则
        "strings":{ //template 名称
          "match_mapping_type":"string", //匹配规则
          "match": "message*", //以message开头的字段设置为keyword
          "mapping":{ //设置信息
            "type": "keyword"
          }
        }
      }]
    }
  }
}

示例如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

自定义mapping的建议

自定义mapping 的操作步骤如下:
1、写入一条文档到es的临时索引中,获取es自动生成的 mapping
2、修改步骤1得到的 mapping,自定义相关配置
3、使用步骤2的mapping创建实际所需索引

索引模板

英文为 Index Template,主要用于在新建索引时自动应用预先设定的配置,简化索引创建的操作步骤
可以设定索引的配置和 mapping
可以有多个模板,根据order设置,order大的覆盖小的配置

PUT _template/test_template
{
  "index_patterns":["te*","bar*"], //匹配的索引名称
  "order":0, //每个模板的执行顺序号
  "settings": {
    "number_of_shards": 1
  },
  "mappings": {
    "docs":{
      "_source": {  不记录原始数据
        "enabled": false
      },
      "properties": {
        "name":{
          "type": "keyword"
        }
      }
    }
  }
}

GET _template 获取所有模板
GET _template/test_template 获取指定模板
DELETE _template/test_template 删除指定模板

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值