Elasticsearch之动态模板

Dynamic templates(动态模板)

利用自定义规则来配置动态添加的字段的映射。

动态模板基础规则

动态模板允许您定义自定义映射,可根据以下条件应用于动态添加的字段:
Elasticsearch 检测到的数据类型,使用match_mapping_type。
字段的名称,使用 match 和 unmatch 或 match_pattern。
到字段的完整虚线路径,使用 path_match 和 path_unmatch。

1. match_mapping_type

这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
                }
              }
            }
          }
        }
      ]
    }
  }
}

2. match

需要设置的、与之匹配的字段

3. unmatch

不需要设置的、与之匹配的字段
例如:匹配long_开头的字段,但不是_text结尾的字段

PUT my_index
{
  "mappings": {
    "_doc": {
      "dynamic_templates": [
        {
          "longs_as_strings": {
            "match_mapping_type": "string",
            "match":   "long_*",
            "unmatch": "*_text",
            "mapping": {
              "type": "long"
            }
          }
        }
      ]
    }
  }
}

4. match_pattern

该match_pattern参数调整参数的行为match,使其支持字段名称上的完整Java正则表达式匹配,而不是简单的通配符,例如:

  "match_pattern": "regex",
  "match": "^profit_\d+$"

5. path_match

类似于match,作用于路径

6. path_unmatch

类似于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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值