映射

edit

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

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

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

在7.0.0之前,映射定义包含一个类型名称。 Elasticsearch 7.0.0及更高版本不再接受默认映射。请参阅移除映射类型

动态映射

edit

当你使用动态映射时,Elasticsearch会自动尝试检测文档中字段的数据类型。这使你可以通过向索引添加数据来快速开始。如果你使用新字段索引其他文档,Elasticsearch会自动添加这些字段。你可以将字段添加到顶级映射,以及内部对象嵌套字段。

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

显式映射

edit

使用显式映射来精确地定义数据类型如何映射到字段,根据您的特定用例进行定制。

定义自己的映射使您能够:

  • 定义哪些字符串字段应被视为全文字段。
  • 定义哪些字段包含数字、日期或地理位置。
  • 使用无法自动检测的数据类型(例如 geo_pointgeo_shape。)
  • 选择日期值 格式,包括自定义日期格式。
  • 创建自定义规则以控制 动态添加字段 的映射。
  • 优化字段以进行部分匹配。
  • 执行特定语言的文本分析。

为不同的目的以不同的方式索引同一个字段通常很有用。 例如,您可能希望将一个字符串字段同时索引为用于全文搜索的文本字段和用于排序或聚合数据的keyword字段。或者,您可能选择使用多种语言分析器来处理包含用户输入的字符串字段的内容。

使用 运行时字段 无需重新索引即可进行模式更改。您可以将运行时字段与索引字段结合使用,以平衡资源使用和性能。您的索引将更小,但搜索性能会较慢。

管理和更新映射

edit

应在索引创建时为预先知道的字段定义显式映射。 随着数据的发展,您仍然可以随时向映射中添加新字段

使用更新映射 API来更新现有映射。

在大多数情况下,您无法更改已经映射的字段的映射。这些更改需要重新索引

然而,您可以在某些条件下更新映射:

  • 您可以随时向现有映射添加新字段,显式或动态地添加。
  • 您可以为现有字段添加新的多字段

    • 在映射更新之前索引的文档在更新或重新索引之前不会具有新多字段的值。在映射更改之后索引的文档将自动具有新多字段的值。
  • 某些映射参数可以为某些数据类型的现有字段进行更新。

防止映射爆炸

edit

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

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

使用映射限制设置来限制字段映射的数量(无论是手动创建还是动态创建),并防止文档导致映射爆炸。