Elasticsearch Reference【Mapping】

来源:互联网 发布:编程珠玑 百度网盘 编辑:程序博客网 时间:2024/06/07 16:52

环境

elasticsearch:5.6

映射(Mapping)

映射是定义什么样的文档、包含什么字段、如何存储和如何索引的过程。
例如,使用映射来定义:

  • 哪些字符串字段应该被看做全文本字段。
  • 哪些字段包含数字、日期和地理位置。
  • 在文档中所有的字段的值是否应该被索引包含到_all字段中。
  • 日期格式的值。
  • 自定义规则来定义动态添加字段的映射。

映射类型(Mapping Types)

个人说明:之前的译文中解释过Mapping Types,这个其实就是elasticsearch中的类型概念。

每个索引都有一个或多个映射类型,用于将索引中的文档分成逻辑组。比如:用户文档可能存储在user类型中,博客类文档存储在博客类型中。

从版本6.0开始,类型(type)这个概念将会被移除掉

一个映射类型有:

元字段(Meta-fields):元字段是用于定义如何处理关联文档的元数据。
例如:元字段包括文档的_index_type_id_source字段。

字段或属性(Fields or properties):
每个映射类型包含类型相关的字段或属性列表。一个user类型可能包含titlenameage字段,而博客类型可能包含titlebodyuser_idcreated字段。在同一个索引中不同的类型的相同字段必须是同一个映射。

字段数据类型(Field datatypes)

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

  • 一个简单的类型像:textkeyworddatelongdoubledoubleboolean或者ip
  • 一个支持json层次的数据类型,如:objectnested
  • 或者 专门的类型像:geo_pointgeo_shape或者completion

为了不同的目的,以不同的方式来索引相同的字段,是非常有用的。
例如,一个string字段可能被索引为一个全文搜索text字段,并且为了排序或者聚合而作为关键字(keyword)字段。另外,你可以使用标准词分析英语词分析法语词分析来索引一个字符串字段。

这就是多字段(multi-fields)的目的。大多数数据类型通过fields参数支持多字段(multi-fields)。

Settings to prevent mappings explosion

(防止映射爆炸的设置)

在索引中定义太多的字段是导致映射爆炸的条件之一,其可能会引起内存错误和难以恢复的情况。这个问题可能比预期更普遍。举个例子,考虑插入每个新文档都有新字段。这在动态索引中是非常普遍的。每次一个文档包含新字段时,这些都将以索引的映射结束。对于少量的数据不用担心,但随着映射的增长,这可能成为一个问题。以下设置允许你限制可以手动或者动态创建的字段映射的数量,为了防止坏文档造成映射爆炸:

index.mapping.total_fields.limit
在索引中字段最大的数量。默认为1000

index.mapping.depth.limit
一个字段最大的深度,这是衡量内部对象的数量。例如,如果所有的字段是在根对象级别定义,其深度就是1。如果是一个对象映射,其深度就是2,等等。默认20

index.mapping.nested_fields.limit
索引中嵌套字段的最大数量,默认是50。索引一个包含100个嵌套字段的文档,实际索引了101个文档,因为每个嵌套文档会作为单独的隐藏文档。

动态映射(Dynamic mapping)

在使用之前,字段和映射类型不需要提前定义的。由于有动态映射,所以只需要索引一个文档,新映射类型和新字段名称将会被自动添加。
新字段可以添加到顶层映射类型、内部对象(object)和嵌套字段(nested)。
可以自定义动态映射的规则来映射新类型和新字段。

显示映射(Explicit mappings)

参考地址:
https://www.elastic.co/guide/en/elasticsearch/reference/5.6/mapping.html#_explicit_mappings

原创粉丝点击