ES Mapping

映射是定义如何存储和索引一个文件及其包含的字段的过程。

每个文档都是一个字段的集合,每个字段都有自己的数据类型。当映射你的数据时,你创建一个映射定义,其中包含一个与文档相关的字段列表。映射定义还包括元数据字段,比如_source字段,它可以自定义如何处理一个文档的相关元数据。

使用动态映射和显式映射来定义你的数据。每种方法都根据你在数据旅程中的位置提供不同的好处。例如,在你不想使用默认值的地方明确映射字段,或者对创建的字段获得更大的控制。然后你可以让Elasticsearch动态地添加其他字段。

在7.0.0之前,映射定义包括一个类型名称。Elasticsearch 7.0.0及以后版本不再接受默认的映射。参见移除映射类型。

实验映射选项

在搜索请求中定义运行时字段,以实验不同的映射选项,还可以在搜索请求中通过覆盖映射中的值来修复你的索引映射值中的错误。

动态映射

动态映射允许你在刚开始的时候实验和探索数据。Elasticsearch会自动添加新的字段,只需对文档进行索引。你可以将字段添加到顶层映射,以及内部对象和嵌套字段。

使用动态模板来定义自定义映射,根据匹配条件应用于动态添加的字段。

动态映射
Elasticsearch最重要的特点之一是它试图摆脱你的束缚,让你尽快开始探索你的数据。要为一个文档建立索引,你不必先创建一个索引,定义一个映射类型,并定义你的字段--你可以直接为一个文档建立索引,索引、类型和字段会自动显示。

PUT data/_doc/1
{ "count": 5 }

创建数据索引,_doc映射类型,以及一个数据类型为long的字段count。

自动检测和添加新字段被称为动态映射。动态映射规则可以根据你的目的来定制,用。

动态字段映射
管理动态字段检测的规则。

动态字段映射
当Elasticsearch检测到文档中的一个新字段时,它默认会动态地将该字段添加到类型映射中。动态参数控制这一行为。

你可以明确指示Elasticsearch根据传入的文档动态地创建字段,方法是将动态参数设置为true或runtime。当启用动态字段映射时,Elasticsearch使用下表中的规则来决定如何为每个字段映射数据类型。

下表中的字段数据类型是Elasticsearch动态检测的唯一字段数据类型。你必须明确地映射所有其他的数据类型。

JSON data type

"dynamic":"true"

"dynamic":"runtime"

null

No field added

No field added

true or false

boolean

boolean

double

float

double

long

long

long

object

object

No field added

array

Depends on the first non-null value in the array

Depends on the first non-null value in the array

string that passes date detection

date

date

string that passes numeric detection

float or long

double or long

string that doesn’t pass date detection or numeric detection

text with a .keyword sub-field

keyword


动态模板
配置动态添加字段的映射的自定义规则。
索引模板允许你配置新索引的默认映射、设置和别名,无论是自动创建还是显式创建。

动态模板
动态模板允许你在默认的动态字段映射规则之外,更好地控制Elasticsearch如何映射你的数据。你可以通过将动态参数设置为true或runtime来启用动态映射。然后你可以使用动态模板来定义自定义映射,这些映射可以根据匹配条件应用于动态添加的字段。

match_mapping_type 对Elasticsearch检测到的数据类型进行操作
match和unmatch 使用一个模式来匹配字段名。
path_match和path_unmatch 对字段的完整点状路径进行操作。
如果一个动态模板没有定义match_mapping_type、match或path_match,它将不会匹配任何字段。你仍然可以在批量请求的dynamic_templates部分通过名称来引用该模板。

在映射规范中使用{name}和{dynamic_type}模板变量作为占位符。

只有当一个字段包含一个具体的值时,才会添加动态字段的映射。当字段包含null或空数组时,Elasticsearch不会添加动态字段映射。如果在dynamic_template中使用null_value选项,它只会在第一个有具体值的字段的文档被索引后才会被应用。

动态模板被指定为一个命名对象的数组。

显式映射

显式映射允许你精确选择如何定义映射定义,例如。

哪些字符串字段应被视为全文字段。
哪些字段包含数字、日期或地理位置。
日期值的格式。
自定义规则来控制动态添加字段的映射。
使用运行时字段来进行模式更改,而不需要重新索引。你可以结合使用运行时字段和索引字段来平衡资源使用和性能。你的索引会更小,但搜索性能会更慢。

防止映射爆炸的设置

在一个索引中定义太多的字段会导致映射爆炸,这可能导致内存不足的错误和难以恢复的情况。

考虑一种情况,每一个新插入的文档都会引入新的字段,比如说动态映射。每一个新的字段都被添加到索引映射中,随着映射的增长,这可能成为一个问题。

使用映射限制设置来限制字段映射的数量(手动或动态创建),防止文档造成映射爆炸。 使用www.DeepL.com/Translator翻译(免费版)

posted @ 2022-10-07 15:48  风在何方  阅读(122)  评论(0编辑  收藏  举报