Elasticsearch之Mapping介绍

Mapping(映射)是定义文档及其包含的字段如何存储和索引的过程。例如,使用映射来定义:

  • 哪些字符串字段应该被视为全文字段。
  • 哪些字段包含数字、日期或地理位置。
  • 日期值的格式。
  • 用于控制动态添加字段的映射的自定义规则。

一个映射定义有:
Meta-fields
Meta-fields(元字段)用于自定义如何处理文档的关联元数据。元字段的示例包括文档的_index、_id和_source字段。
Fields or properties
映射包含与文档相关的字段或属性列表。

Field datatypesedit

每个字段都有一个数据类型,可以是:

  • 简单类型例如:text, keyword, date, long, double, boolean or ip.
  • 支持JSON(如object or nested)的层次结构的类型。
  • 或者专门的类型例如:geo_point, geo_shape, or completion.

为不同的目的以不同的方式索引相同的字段通常是有用的。例如,字符串字段可以作为全文搜索的文本字段建立索引,也可以作为排序或聚合的关键字字段建立索引。或者,您可以使用标准分析器、英语分析器和法语分析器来索引字符串字段。

这就是多领域的目的。大多数数据类型通过fields参数支持多字段。

Settings to prevent mappings explosion

在索引中定义太多字段可能会导致映射爆炸,从而导致内存错误和难以恢复的情况。这个问题可能比预期的更普遍。例如,考虑这样一种情况,其中插入的每个新文档都引入了新字段。这在动态映射中很常见。每当文档包含新字段时,这些字段就会出现在索引的映射中。这对于少量数据来说并不令人担忧,但是随着映射的增长,这可能成为一个问题。以下设置允许您限制可以手动或动态创建的字段映射的数量,以防止糟糕的文档导致映射爆炸:
index.mapping.total_fields.limit
索引中字段的最大数目。字段和对象映射以及字段别名都属于此限制。默认值是1000。
备注:这个限制是为了防止映射和搜索变得太大。较高的值可能导致性能下降和内存问题,特别是在负载高或资源少的集群中。如果您增加这个设置,我们建议您也增加indics .query.bool。max_clause_count设置,它限制查询中布尔子句的最大数量。
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(没有限制)。这个设置实际上并没有解决映射爆炸的问题,但是如果您想限制字段长度,它仍然是有用的。通常不需要设置此设置。默认情况下是可以的,除非用户开始添加大量具有非常长的名称的字段。

Dynamic mapping

字段和映射类型在使用之前不需要定义。由于有了动态映射,只需对文档建立索引,就可以自动添加新的字段名。可以将新字段添加到顶级映射类型,也可以添加到内部对象和嵌套字段。
可以将动态映射规则配置为自定义用于新字段的映射。

Explicit mappings

您对数据的了解比Elasticsearch所能猜测的要多,因此,虽然动态映射在开始时可能很有用,但在某些情况下,您可能希望指定自己的显式映射。
您可以在创建索引并将字段添加到现有索引时创建字段映射。

Create an index with an explicit mapping

您可以使用create index API创建具有显式映射的新索引。

PUT /my-index
{
  "mappings": {
    "properties": {
      "age":    { "type": "integer" },  
      "email":  { "type": "keyword"  }, 
      "name":   { "type": "text"  }     
    }
  }
}

Add a field to an existing mapping

您可以使用put mapping API向现有索引添加一个或多个新字段。
下面的示例添加了employee-id,这是一个关键字字段,其索引映射参数值为false。这意味着存储了雇员id字段的值,但是没有索引,也不能用于搜索。

Update the mapping of a field

除了受支持的映射参数外,您不能更改现有字段的映射或字段类型。更改现有字段可能会使已建立索引的数据无效。

如果需要更改字段的映射,请使用正确的映射创建新索引,并将数据重新索引到该索引中。

重命名字段将使已经在旧字段名称下建立索引的数据无效。相反,添加一个别名字段来创建一个替代字段名。

View the mapping of an index

您可以使用get mapping API来查看现有索引的映射。

View the mapping of specific fields

如果只想查看一个或多个特定字段的映射,可以使用get字段映射API。
如果您不需要索引的完整映射,或者您的索引包含大量字段,那么这是非常有用的。
下面的请求检索雇员id字段的映射。

你可能感兴趣的:(Elasticsearch)