Elasticsearch 【mappings 动态模板dynamic_templates】

1、shell

使用dynamic_templates能够彻底控制新字段的映射,你设置能够经过字段名或数据类型应用一个彻底不一样的映射。app

每一个模板都由一个名字用于描述这个模板的用途,一个mapping字段用于指导这个映射怎么使用,和至少一个参数match来定义这个模板使用哪一个字段。模板是按照顺序检测的,第一个匹配的模板会被启用。一般把具体的模板放置在第一位,否则通用性模板会匹配,致使具体的是没法被匹配到的。spa

注:如下都是在sense上操做的code

例子:咱们为/my_index/my_type 分别建立orm

es:字段名以_es结尾的且是string类型的,须要使用spanish分词器索引

enn:其余字段的且是string类型的,须要使用english分词器string

DELETE /my_index

PUT /my_index
{
    "mappings":{
        "my_type":{
            "dynamic_templates":[
                {
                    "es":{                                     =>模板名称,随意,通常要有语义
                        "match":"*_es",                        =>匹配字段名称
                        "match_mapping_type":"string"          =>匹配字段类型
                        "mapping":{                            => 当匹配到以后,该字段的具体设置
                            "type":"string",
                            "anaylzer":"spanish"
                        }
                    }
                },
                {
                    "en":{                                     =>模板名称,随意,通常要有语义
                        "match":"*",                           =>匹配字段名称(任意,通用的顺序要在以后)
                        "match_mapping_type":"string"          =>匹配字段类型
                        "mapping":{                            => 当匹配到以后,该字段的具体设置
                            "type":"string",
                            "anaylzer":"english"
                        }
                    }
                }
            ]
        }
    }
}


POST /my_index/my_type
{
  "str_es":"xxx",            => 匹配es (字段名称匹配,类型匹配)
  "long_es":123,             => 不会匹配es (字段名称匹配,但类型不匹配)
  "date_es":"2015-01-01",    => 不会匹配es (字段名称匹配,但类型不匹配)
  "long_en":123,             => 不会匹配en (字段名称匹配,但类型不匹配)
  "str_en":"xxx",            => 匹配en (字段名称匹配,但类型不匹配)
  "date_en":"2015-01-01"     => 不会匹配en (字段名称匹配,但类型不匹配)
}


//mapping以下,正是结果
GET /my_index/my_type
{
   "my_index": {
      "mappings": {
         "my_type": {
            "dynamic_templates": [
               {
                  "es": {
                     "mapping": {
                        "analyzer": "spanish",
                        "type": "string"
                     },
                     "match": "*_es",
                     "match_mapping_type": "string"
                  }
               },
               {
                  "en": {
                     "mapping": {
                        "analyzer": "english",
                        "type": "string"
                     },
                     "match": "*",
                     "match_mapping_type": "string"
                  }
               }
            ],
            "properties": {
               "date_en": {
                  "type": "date",
                  "format": "dateOptionalTime"
               },
               "date_es": {
                  "type": "date",
                  "format": "dateOptionalTime"
               },
               "long_en": {
                  "type": "long"
               },
               "long_es": {
                  "type": "long"
               },
               "str_en": {
                  "type": "string",
                  "analyzer": "english"
               },
               "str_es": {
                  "type": "string",
                  "analyzer": "spanish"
               },
               "str_es2": {
                  "type": "string",
                  "analyzer": "english"
               }
            }
         }
      }
   }
}


2、默认映射
_default_

一般一个索引中的全部类型具备共享的字段和设置,用_default_映射来指定会设置更方便,而不是每次建立一个类型是重复操做。_default_映射新类型的模板,除非在本身类型的明确进行覆盖
相关文章
相关标签/搜索