ES学习笔记二(Mapping的定义以及自定义分词器)

本文深入解析ES7中Mapping的概念,探讨其对文档数据类型的规定作用,以及如何通过dynamic参数控制字段新增,包括true、false和strict三种模式下字段新增的行为表现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • 什么是Mapping

es7.0版本以后一个索引下面只允许一个Type,就相当于关系型数据库里面只能有一张表,每个Type下面的文档就相当于每个表的记录,一个Mapping属于一个索引的type,Mapping的作用就相当于规定数据库中每张表的字段的类型,也就是规定文档的数据类型

  • 文档的数据类型

这里是引用

  • Dynamic Mapping
    在这里插入图片描述
  • 运行例子

这里是引用
可以看到es帮我们自定义了数据的类型

  • Dynamic Mapping中dynamic有三种情况

在es中,Mapping一经设置就不允许修改的,因为 lucene实现的倒排索引生成后不允许修改,应该重新建立新的索引,然后做reindex操作。
但是可以新增字段,通过 dynamic 参数来控制字段的新增,这个参数的值如下:
true:默认值,表示允许选自动新增字段
false:不允许自动新增字段,但是文档可以正常写入,但无法对字段进行查询等操作
strict:严格模式,文档不能写入,报错

  • 示例代码

在这里插入图片描述

就是说当你设置成false的时候,新增一个字段,数据是可以创建成功的,但是es索引不到

代码例子

#首先我们创建一个文档
PUT mapping_test/_doc/1
{
  "name":"张三"
}
#查询mapping
GET mapping_test/_mapping

#将dynamic设置为false
PUT mapping_test/_mapping
{
  "dynamic": false
}
#新增文档字段
PUT mapping_test/_doc/2
{
  "age":"31"
}
#查询时会显示value等于0
POST mapping_test/_search
{
  "query": {
    "match": {
      "age": "31"
    }
  }
}

当我们设置为strict的时候,在插入的时候会直接报错400

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值