在自定义索引时,映射是定义文档及其包含的字段如何被存储和索引的过程,起着非常重要作用。
例如,使用 mapping 定义:
- 哪些字符串字段应视为全文字段
- 哪些字段包含数字、日期或地理位置
- 日期值的格式
- 用于控制动态添加字段的自定义规则
Mapping 定义主要包含:
元字段
元字段用于自定义如何处理文档的关联元数据。元字段包括文档所在的索引 _index 、文档的唯一id _id 和原始数据 _source 。
字段或属性
包含与文档相关的字段或属性列表。
字段数据类型
每一个字段都有一个数据类型,如:
- 简单类型,如 text, keyword, date, long, double, boolean, ip
- 一种支持JSON层次结构的类型,如 object 或 nested
- 特殊类型,如 geo_point、geo_shape 或 completion
主要分享低代码、微服务、容器化、SAAS、系统架构方面的的内容,希望大家点赞,评论,关注。
为不同的目的以不同的方式索引同一字段通常是有用的。例如,字符串字段可以作为全文搜索的文本字段索引,也可以作为排序或聚合的关键字字段索引。或者,可以使用标准分析器、英语分析器和法语分析器索引同一个字符串字段。
这就是复合字段的目的。大多数数据类型通过 fields 参数来支持多个复合字段。
防止 mappings 爆炸的设置
在索引中定义太多字段是一种可能导致映射爆炸的情况,这种爆炸可能导致内存不足和难以恢复的情况。这个问题可能比预期的更常见。例如,考虑这样一种情况:插入的每个新文档都会引入新字段。这在动态映射中很常见。每次文档包含新字段时,这些字段都会出现在索引的映射中。数据量少时这并不担心,但随着映射的增长,这可能会成为一个问题。以下设置允许您限制可以手动或动态创建的字段映射的数量,以防止错误文档导致映射爆炸:
动态映射
字段和映射类型在使用之前不需要定义。由于动态映射,新的字段名将自动添加,只需索引一个文档。新字段既可以添加到*映射类型,也可以添加到内部对象和嵌套字段。
动态映射规则可以配置为用于新字段的映射。
显式映射
您对数据的了解比 Elasticsearch 所能猜测的要多,因此,虽然动态映射对于开始使用非常有用,但在某些情况下,您需要指定自己的显式映射。
创建索引并将字段添加到现有索引时,可以创建字段映射。
用显式映射新建一个索引
可以使用创建索引 API 创建具有显式映射的新索引。
添加一个字段到已存在的映射中
可以使用 put方法 调用 API 向现有索引添加一个或多个新字段。
下面的示例添加 employee-id,这是一个关键字字段,其索引映射参数值为false。这意味着 employee-id 字段的值会被存储,但没有被索引且不可用于搜索。
更新一个字段的映射
除了支持映射参数外,不能更改现有字段的映射或字段类型。更改现有字段可能会使已编制索引的数据无效。
如果需要更改字段的映射,请使用正确的映射创建新索引,并将数据重新索引到该索引中。
重命名字段将使已在旧字段名下索引的数据无效。相反,添加别名字段以创建备用字段名。
查看一个索引的字段映射
你可以通过 GET 方法访问 mapping API 查看指定索引的映射信息。
返回:
查看指定字段的映射
如果只想查看一个或多个特定字段的映射,可以使用get field mapping API。
如果不需要索引的完整映射,或者索引包含大量字段,则此功能非常有用。
下面的请求返回了字段 employee-id 的映射信息。
返回:
主要分享低代码、微服务、容器化、SAAS、系统架构方面的的内容,希望大家点赞,评论,关注。