ElasticSearch 7.x mapping 定义说明
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ElasticSearch 7.x mapping 定义说明相关的知识,希望对你有一定的参考价值。
在自定义索引时,映射是定义文档及其包含的字段如何被存储和索引的过程,起着非常重要作用。
例如,使用 mapping 定义:
- 哪些字符串字段应视为全文字段
- 哪些字段包含数字、日期或地理位置
- 日期值的格式
- 用于控制动态添加字段的自定义规则
Mapping 定义主要包含:
元字段
元字段用于自定义如何处理文档的关联元数据。元字段包括文档所在的索引 _index 、文档的唯一id _id 和原始数据 _source 。
字段或属性
包含与文档相关的字段或属性列表。
字段数据类型
每一个字段都有一个数据类型,如:
- 简单类型,如 text, keyword, date, long, double, boolean, ip
- 一种支持JSON层次结构的类型,如 object 或 nested
- 特殊类型,如 geo_point、geo_shape 或 completion
主要分享低代码、微服务、容器化、SAAS、系统架构方面的的内容,希望大家点赞,评论,关注。
为不同的目的以不同的方式索引同一字段通常是有用的。例如,字符串字段可以作为全文搜索的文本字段索引,也可以作为排序或聚合的关键字字段索引。或者,可以使用标准分析器、英语分析器和法语分析器索引同一个字符串字段。
这就是复合字段的目的。大多数数据类型通过 fields 参数来支持多个复合字段。
防止 mappings 爆炸的设置
在索引中定义太多字段是一种可能导致映射爆炸的情况,这种爆炸可能导致内存不足和难以恢复的情况。这个问题可能比预期的更常见。例如,考虑这样一种情况:插入的每个新文档都会引入新字段。这在动态映射中很常见。每次文档包含新字段时,这些字段都会出现在索引的映射中。数据量少时这并不担心,但随着映射的增长,这可能会成为一个问题。以下设置允许您限制可以手动或动态创建的字段映射的数量,以防止错误文档导致映射爆炸:
index.mapping.total_fields.limit
# 索引中字段的最大数量。字段和对象映射以及字段别名都将计入此限制。默认值为1000。
index.mapping.depth.limit
#字段映射的最大深度,以内部对象的数量来衡量。例如,如果所有字段都在根对象级别定义,
则深度为1。如果有一个对象映射,则深度为2等。默认值为20。
index.mapping.nested_fields.limit
# 不同嵌套映射的最大数目,默认为50。
index.mapping.nested_objects.limit
# 单个文档中所有嵌套类型的最大嵌套 JSON 对象数,默认为10000。
index.mapping.field_name_length.limit
# 字段名的最大长度。默认值为 Long.MAX_value(无限制)。这个设置并不能解决映射爆炸问题,
但是如果您想限制字段长度,它可能仍然很有用。通常不需要设置此设置。默认设置是可以的,
除非用户开始添加大量具有真正长名称的字段。
动态映射
字段和映射类型在使用之前不需要定义。由于动态映射,新的字段名将自动添加,只需索引一个文档。新字段既可以添加到顶级映射类型,也可以添加到内部对象和嵌套字段。
动态映射规则可以配置为用于新字段的映射。
显式映射
您对数据的了解比 Elasticsearch 所能猜测的要多,因此,虽然动态映射对于开始使用非常有用,但在某些情况下,您需要指定自己的显式映射。
创建索引并将字段添加到现有索引时,可以创建字段映射。
用显式映射新建一个索引
可以使用创建索引 API 创建具有显式映射的新索引。
PUT /user-index
"mappings":
"properties":
"age": "type": "integer" ,
"email": "type": "keyword" ,
"name": "type": "text"
添加一个字段到已存在的映射中
可以使用 put方法 调用 API 向现有索引添加一个或多个新字段。
下面的示例添加 employee-id,这是一个关键字字段,其索引映射参数值为false。这意味着 employee-id 字段的值会被存储,但没有被索引且不可用于搜索。
PUT /user-index/_mapping
"properties":
"employee-id":
"type": "keyword",
"index": false
更新一个字段的映射
除了支持映射参数外,不能更改现有字段的映射或字段类型。更改现有字段可能会使已编制索引的数据无效。
如果需要更改字段的映射,请使用正确的映射创建新索引,并将数据重新索引到该索引中。
重命名字段将使已在旧字段名下索引的数据无效。相反,添加别名字段以创建备用字段名。
查看一个索引的字段映射
你可以通过 GET 方法访问 mapping API 查看指定索引的映射信息。
GET /user-index/_mapping
返回:
"user-index" :
"mappings" :
"properties" :
"age" :
"type" : "integer"
,
"email" :
"type" : "keyword"
,
"employee-id" :
"type" : "keyword",
"index" : false
,
"name" :
"type" : "text"
查看指定字段的映射
如果只想查看一个或多个特定字段的映射,可以使用get field mapping API。
如果不需要索引的完整映射,或者索引包含大量字段,则此功能非常有用。
下面的请求返回了字段 employee-id 的映射信息。
GET /user-index/_mapping/field/employee-id
返回:
"user-index" :
"mappings" :
"employee-id" :
"full_name" : "employee-id",
"mapping" :
"employee-id" :
"type" : "keyword",
"index" : false
主要分享低代码、微服务、容器化、SAAS、系统架构方面的的内容,希望大家点赞,评论,关注。
以上是关于ElasticSearch 7.x mapping 定义说明的主要内容,如果未能解决你的问题,请参考以下文章
ElasticSearch 7.x 鎸囧畾绱㈠紩绫诲瀷鍑虹幇涓嬮潰閿欒
Elasticsearch 7.X 聚合查询 及 ElasticsearchRestTemplate 操作
Elasticsearch 7.X 聚合查询 及 ElasticsearchRestTemplate 操作
Elasticsearch 7.x 深入【1】索引【四】常用属性