映射

编辑

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

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

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

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

动态映射

编辑

当您使用动态映射时,Elasticsearch 会自动尝试检测文档中字段的数据类型。这使您可以通过仅向索引添加数据来快速入门。如果您索引包含新字段的额外文档,Elasticsearch 将自动添加这些字段。您可以将字段添加到顶级映射,以及内部的objectnested字段。

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

显式映射

编辑

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

定义自己的映射使您能够

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

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

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

管理和更新映射

编辑

对于您事先知道的字段,应在索引创建时定义显式映射。随着数据的演变,您仍然可以随时向映射添加新字段

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

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

但是,您可以在特定条件下更新映射

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

    • 在映射更新之前索引的文档将没有新多字段的值,直到它们被更新或重新索引。映射更改后索引的文档将自动具有新多字段的值。
  • 某些映射参数可以为某些数据类型的现有字段更新。

防止映射爆炸

编辑

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

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

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