Mapping是定义Document及其包含的field如何存储和索引的过程。例如,使用mapping来定义:
每个索引都包含一个mapping type,用来决定document如何被索引
索引类型包括:
Meta-fields 用于自定义如何处理文档的相关元数据。Meta-fields的例子 包括 _index
, _type
, _id
, and _source
字段。
Fields or properties
mapping 类型包含字段列表或properties
与文档相关的字段列表
每个字段都有一个数据type,可以是:
特殊类型:geo_point
, geo_shape
, 或completion
等
为了不同的目的以不同的方式索引相同的字段通常很有用。例如,一个string
字段可以被索引为一个text
用于全文搜索的keyword
字段,以及一个用于排序或聚合的字段。或者,您可以使用standard
分析器、 english
分析器和 french
分析器来索引字符串字段。
这就是多字段的目的。大多数数据类型通过fields
参数支持多字段。
字段和映射类型在使用前不需要定义。由于动态mapping,新的字段名称将自动添加,只需索引文档即可。新字段既可以添加到顶级映射类型,也可以添加到内部object
和nested
字段。
该动态映射规则可经配置以定制用于新字段的映射。
index可用户设置字段是否被索引,默认为true,false即为不可搜索
需要对Null值实现搜索时使用,只有keyword类型才支持设定null_value
在索引中定义太多字段会导致映射爆炸,从而导致内存不足错误和难以恢复的情况。这个问题可能比预期的更常见。例如,考虑这样一种情况,其中插入的每个新文档都会引入新字段。这在动态映射中很常见。每次文档包含新字段时,这些字段都会在索引的映射中结束。对于少量数据,这并不令人担忧,但随着映射的增长,它可能会成为一个问题。以下设置允许您限制可以手动或动态创建的字段映射的数量,以防止不良文档导致映射爆炸:
index.mapping.total_fields.limit
索引中的最大字段数。默认值为1000
。
index.mapping.depth.limit
field的最大深度,以内部object的数量来衡量。例如,如果所有字段都在根对象级别定义,则深度为1。如果有一个对象映射,则深度为2等。默认为20
。
index.mapping.nested_fields.limit
nested
索引中 的最大字段数,默认为50
。索引具有 100 个嵌套字段的 1 个文档实际上索引了 101 个文档,因为每个嵌套文档都被索引为一个单独的隐藏文档。
除了记录在案的地方,现有的字段映射无法更新。更改映射意味着使已编入索引的文档无效。相反,你应该创建正确映射一个新的索引和reindex的数据转换成指数
curl -X PUT "localhost:9200/my_index?pretty" -H ‘Content-Type: application/json‘ -d‘ # 创建一个index(my_index)
{
"mappings": {
"doc": { # 添加一个名为doc的类型
"properties": { #指定字段或属性
"title": { "type": "text" }, #
指定该title字段包含text值
"name": { "type": "text" }, # 指定该name字段包含text值。
"age": { "type": "integer" }, # 指定该age字段包含integer值。
"created": { #指定该created字段包含date两种可能格式的值。
"type": "date",
"format": "strict_date_optional_time||epoch_millis"
}
}
}
}
}
‘
参考:https://www.elastic.co/guide/en/elasticsearch/reference/6.0/mapping.html#mapping-limit-settings
https://www.bilibili.com/video/BV1x54y15775?p=11
原文:https://www.cnblogs.com/xinbat/p/15154875.html