Elasticsearch——映射

目录

映射

1.映射类型

2.字段数据类型

3.动态映射

4.显式映射

5.更新已存在的字段映射

翻译源:Elasticsearch 6.4 文档


 

 

映射

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

例如,使用映射定义:

  • 哪些字符串字段应该被视作全文本字段
  • 哪些字段包含数组、日期或定位
  • 是否文档中所有字段的值都应该被索引进_all字段
  • 日期值的格式
  • 添加规则来控制动态添加字段的映射

 

 

1.映射类型

每一个索引具有一个映射类型,映射类型决定了文档如何构成索引。

一个映射类型包含:

元字段

元字段被用于定制与之关联的文档元数据如何被对待处理。例如,元字段包含文档的_index、_type、_id与_source字段。

字段或属性

一个映射类型包含与文档相关的字段或属性列表。

 

 

2.字段数据类型

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

  • 简单类型,如text、keyword、date、long、double、boolean或ip
  • 支持JSON层次性的类型,如object、nested
  • 专用类型,如geo_point、geo_shape或completion

 

为了不同的目的,用不同的方法对相同的字段进行索引通常非常有用。

例如,string字段可以被索引为text字段用于全文本搜索,索引为keyword字段用于排序或聚合。或者,可以使用standard analyzer、english analyzer与french analyzer来索引一个string字段。

 

防止映射爆炸的设置

在一个索引中定义过多的字段是导致映射爆炸的条件,这可能造成内存溢出错误与难以恢复的困难情况。

这个问题可能比预期情况还要普遍。

例如,考虑这种情况,每一个新插入的文档都引入了新的字段,这在动态映射中非常常见。

每次插入的文档都包含新的字段,这些字段都将进入索引的映射。

这在数据量很少的时候不必担心,但是随着映射的增加,这将成为问题。

以下设置可以限制手动或动态创建的字段映射的数量,以防糟糕的文档造成的映射爆炸:

index.mapping.total_fields.limit

索引中字段的最大数量,默认为1000。

index.mapping.depth.limit

字段中的最大深度,用于度量内部对象的数量。例如,定义在根对象层的所有字段的深度为1,如果存在一个对象映射,此时深度为2,默认为20。

index.mapping.nested_fields.limit

索引中内嵌字段的最大数量,默认为50。索引一个具有100个内嵌字段的文档实际上索引了101个文档,因为每一个内嵌的文档都被作为一个独立隐藏文档被索引。

 

 

3.动态映射

字段与映射类型在被使用之前不需要被定义。

由于动态映射,新的字段名称将会被自动添加,只需要索引一个文档即可。

新字段可以被添加到顶级映射类型,内部对象与内嵌字段。

动态映射规则可以被配置为定制用于新字段的映射。

 

 

4.显式映射

尽管动态映射很有用,但由于使用者自身比Elasticsearch更了解数据,所以有些时候需要指定显式映射。

可以在创建索引时创建字段映射,也可以使用PUT 映射API添加字段到已存在的索引中。

 

 

5.更新已存在的字段映射

除了有文档记录的地方,已存在的字段映射不能被更新。

改变映射意味着已经索引的文档无效。相反,应该创建具有正确映射的新索引,然后重建索引,将数据导入新索引中。

如果只想要将字段重命名并不改变它的映射,这将令引入别名字段有了意义。

 

 

 


翻译源:Elasticsearch 6.4 文档

你可能感兴趣的:(Elasticsearch——映射)