Dynamic Mapping
1. 概述
Elastisearch最重要的特征之一就是,它尝试跳出固有的方式,让你尽可能快地开始探索你的数据。为了索引一条文档,你不必先创建一个索引,然后定义字段和映射类型,你可以直接索引一条文档,索引,字段和字段类型会自动地被创建。
PUT data/_doc/1
{
"count": 5
}
自动创建data
索引,映射类型为_doc
,并且有一个字段名为count
,数据类型为long
的映射字段
自动检测和添加新字段,被称为动态映射。你可以用以下参数自定义动态映射规则来满足你的目的:
动态字段映射
: 控制动态字段检测的规则
动态模板
: 自定义规则来配置动态添加的字段映射
TIP
: 无论是自动创建还是显式创建索引,索引模板都允许你为新索引配置默认的映射,设置和别名。
2. 动态字段映射
默认地,当一个之前没有见过的字段出现在了一条文档中,Elasticsearch会将这个字段添加到类型映射中。可以通过将dynamic
参数设置为false(忽略新字段,索引其他已知字段)或者strict(在遇到未知字段时拒绝索引这条文档,并且抛出异常),在文档和对象层面,禁用这种动态添加字段的行为。
假设dynamic
映射参数被启用(=true), 一些简单的规则被用来决定一个新的字段应该被设置为哪种es的字段类型:
JSON 数据类型 | Elasticsearch 数据类型 |
---|---|
null | 不添加该字段 |
true 或 false | boolean类型字段 |
浮点数 | float类型字段 |
整数 | long类型字段 |
对象 | object类型字段 |
数组 | 取决于数组中的第一个不为null值的类型 |
字符串 | 以下四种类型之一,date类型的字段(如果通过日期检查), double或float类型的字段(如果通过数字检查),text类型的字段(并且带一个类型为keyword的子字段) |
这些是仅有的可以动态检查并添加的字段数据类型,所有其他的数据类型必须被明确的定义在映射类型中。
除了以下列出来的选项,动态字段映射规则可以在动态模板中被进一步自定义:
2.1 日期检查
如果启用日期检查—date_detection=true
(默认),然后新的字符串字段的内容会被检查是否匹配任何dynamic_date_formats
中指定的日期格式,如果发现了匹配,一个新的日期类型的字段将会以对应的格式被添加进映射类型中。
dynamic_date_formats
的默认值为:
[“strict_date_optional_time”, “yyyy/MM/dd HH:mm:ss Z||yyyy/MM/dd Z”]
比如:
PUT my_index/_doc/1
{
"create_date": "2015/09/02"
}
GET my_index/_mapping
{
"my_index" : {
"mappings" : {
"properties" : {
"create_date" :