利用自定义规则来配置动态添加的字段的映射。
动态模板允许您定义自定义映射,可根据以下条件应用于动态添加的字段:
Elasticsearch 检测到的数据类型,使用match_mapping_type。
字段的名称,使用 match 和 unmatch 或 match_pattern。
到字段的完整虚线路径,使用 path_match 和 path_unmatch。
这match_mapping_type是json解析器检测到的数据类型。由于JSON不允许区分long从一个integer或double从float,它总是会选择更广泛的数据类型,即。long对于整数和double浮点数。
可以自动检测以下数据类型:
boolean何时true或false遇到。
date当日期检测被使能和一个串中发现匹配任何配置的日期格式。
double 对于带小数部分的数字。
long 对于没有小数部分的数字。
object 对象,也称为哈希。
string 用于字符串。
* 也可用于匹配所有数据类型。
例如:我们要把识别的long类型转换为integer类型,Stirng类型转换成keyword类型。
PUT my_index
{
"mappings": {
"_doc": {
"dynamic_templates": [
{
"integers": {
"match_mapping_type": "long",
"mapping": {
"type": "integer"
}
}
},
{
"strings": {
"match_mapping_type": "string",
"mapping": {
"type": "text",
"fields": {
"raw": {
"type": "keyword",
"ignore_above": 256
}
}
}
}
}
]
}
}
}
需要设置的、与之匹配的字段
不需要设置的、与之匹配的字段
例如:匹配long_开头的字段,但不是_text结尾的字段
PUT my_index
{
"mappings": {
"_doc": {
"dynamic_templates": [
{
"longs_as_strings": {
"match_mapping_type": "string",
"match": "long_*",
"unmatch": "*_text",
"mapping": {
"type": "long"
}
}
}
]
}
}
}
该match_pattern参数调整参数的行为match,使其支持字段名称上的完整Java正则表达式匹配,而不是简单的通配符,例如:
"match_pattern": "regex",
"match": "^profit_\d+$"
类似于match,作用于路径
类似于unmatch,作用于路径
匹配name路径下的所有字段,但不匹配以middle结尾的路径,例如:
PUT my_index
{
"mappings": {
"_doc": {
"dynamic_templates": [
{
"full_name": {
"path_match": "name.*",
"path_unmatch": "*.middle",
"mapping": {
"type": "text",
"copy_to": "full_name"
}
}
}
]
}
}
}
PUT _template/template_1
{
"index_patterns": ["te*", "bar*"],
"settings": {
"number_of_shards": 1
},
"mappings": {
"dynamic_templates": [
{
"longs_as_strings": {
"match_mapping_type": "string",
"match": "long_*",
"unmatch": "*_text",
"mapping": {
"type": "long"
}
}
}
],
"_doc": {
"_source": {
"enabled": false
},
"properties": {
"host_name": {
"type": "keyword"
},
"created_at": {
"type": "date",
"format": "EEE MMM dd HH:mm:ss Z YYYY"
}
}
}
}
}
参考:https://www.elastic.co/guide/en/elasticsearch/reference/current/dynamic-templates.html