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_映射新类型的模板,除非在本身类型的明确进行覆盖