本文主要是介绍Elasticsearch Reference【Mapping】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
环境
elasticsearch:5.6
映射(Mapping)
映射是定义什么样的文档、包含什么字段、如何存储和如何索引的过程。
例如,使用映射来定义:
- 哪些字符串字段应该被看做全文本字段。
- 哪些字段包含数字、日期和地理位置。
- 在文档中所有的字段的值是否应该被索引包含到
_all
字段中。 - 日期格式的值。
- 自定义规则来定义动态添加字段的映射。
映射类型(Mapping Types)
个人说明:之前的译文中解释过Mapping Types
,这个其实就是elasticsearch
中的类型概念。
每个索引都有一个或多个映射类型,用于将索引中的文档分成逻辑组。比如:用户文档可能存储在user
类型中,博客类文档存储在博客类型中。
从版本6.0开始,类型(type)这个概念将会被移除掉
一个映射类型有:
元字段(Meta-fields):元字段是用于定义如何处理关联文档的元数据。
例如:元字段包括文档的_index
、_type
、_id
和_source
字段。
字段或属性(Fields or properties):
每个映射类型包含类型相关的字段或属性列表。一个user
类型可能包含title
、name
和 age
字段,而博客类型可能包含title
、body
、user_id
和created
字段。在同一个索引中不同的类型的相同字段必须是同一个映射。
字段数据类型(Field datatypes)
每个字段都有一个数据类型,可以是如下:
- 一个简单的类型像:
text
、keyword
、date
、long
、double
、double
、boolean
或者ip
。 - 一个支持
json
层次的数据类型,如:object
或nested
。 - 或者 专门的类型像:
geo_point
、geo_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
这篇关于Elasticsearch Reference【Mapping】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!