Elasticsearch Mapping(字段映射)

本文介绍了Elasticsearch的Mapping概念,它类似于数据库的schema,并且支持动态映射。动态映射会自动根据文档推断字段类型,但可能不准确。通过设置dynamic映射策略,可以控制字段添加和类型更改。当需要更改已存在字段的类型时,需要重新索引,因为Lucene的倒排索引不允许修改。合理地设定Mapping和管理动态映射对于提高搜索效率和节省存储至关重要。
摘要由CSDN通过智能技术生成


前言

Elasticsearch 的 Mapping 对应着数据库的 schema,比数据库的 schema 灵活的是 Mapping 可以是 Dynamic 的,也就是如果不定义 Mapping 还是可以往 ES 里面插入文档的。但是数据库中如果不新建表,是不能插入数据的。

1.什么是 Mapping

Mapping 类似数据库中的 schema,定义了索引中的字段名称、数据类型(字符串、数字、布尔、日期等),还可以定义字段倒排索引的相关配置。Mapping 会把 JSON 文档映射成 Lucene 所需要的扁平格式。一个 Mapping 属于一个索引的 Type,每个文档都属于一个 Type,一个 Type 有一个 Mapping 的定义。7.0开始,不需要在 Mapping 定义中指定 Type 信息。
Mapping 中定义的字段数据类型可分为三类:简单类型、复杂类型、特殊类型。

  • 简单类型:Text / Keyword、Date、Integer / Floating、Boolean、IPV4 & IPV6
  • 复杂类型:对象类型/嵌套类型
  • 特殊类型:geo_point & geo_shape / percolator

2.什么是 Dynamic Mapping

Elasticsearch 提供了 Dynamic Mapping 机制,使我们在写入文档的时候,如果索引不存在,会自动创建索引,无需手动定义 Mappings。ES 会自动根据文档信息,推算出字段的类型,但有时候会推算不准确,例如地理位置信息。当类型如果设置不对时,会导致一些功能无法正常运行,例如 Range 查询。可以使用 GET movies/_mappings命令查看 Mapping。

一、类型的自动识别

数字用引号的时候,会默认当成 Text,有些一类型会推导出错,比如地理位置信息。

JSON 类型 Elasticsearch 类型
字符串 匹配日期格式成 Date;匹配数字为 float 或者 long,该选项默认关闭;设置为 Text,并且增加 keyword 子字段
布尔值 boolean
浮点数 float
整数 long
对象 object
数组 由第一个非空数值类型所决定
空值 忽略

二、Dynamic Mappings 设置

当 dynamic 被设置成 false 时,存在新增字段的文档写入,该文档可以被索引,但是里面新增的字段则不会被索引。当设置成 strict 时,新增时会报错。

mapping true false strict
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值