Elasticsearch动态模板

在elasticsearch中,如果你有一类相似的数据字段,想要统一设置其映射,就可以用到一项功能:动态模板映射(dynamic_templates)。

每个模板都有一个名字用于描述这个模板的用途,一个 mapping 字段用于指明这个映射怎么使用,和至少一个参数(例如 match)来定义这个模板适用于哪个字段。

参数:

  match_mapping_type允许你只对特定类型的字段使用模板,正如标准动态映射规则那样,比如string,long等。

  match(unmatch相反)参数只会匹配字段名,如"*_es",如果为"*",就是所有字段(同时是match_papping_type类型)都会匹配到

  path_match(path_unmatch相反)参数用于匹配对象中字段的完整路径,比如address.*.name可以匹配如下字段:

    {
        "address":{
            "city":{
                "name": "New York"
            }
        }
    }

下面分两种情况进行举例:
  第一种:直接在普通的mapping中设置
    

curl -XPUT localhost:9200/my_index -d '{     

  "mappings":{         

    "my_type":{               # 文档类型

      "dynamic_templates":  # 关键词,固定的

扫描二维码关注公众号,回复: 5420154 查看本文章

      [                     # 必须是中括号

         {                    

           "es":{           #模板名                                                  

            "match":"*_es",       #匹配规则                                         

            "match_mapping_type":"string",   #匹配类型                               

            "mapping":{                                                        

              "type":"text",                             # 转换成的类型

              "anaylzer":"spanish"                        

             }                     

            }                

         },                 

        {                     

          "en":{                                                            

            "match":"*",                                                   

            "match_mapping_type":"string",                                

            "mapping":{                                                    

              "type":"text",                             

              "anaylzer":"english"                        

             }                     

          }                 

        },

        {

          "date":{

            "unmatch":"*_es",

            "match_mapping_type":"date",

            "mapping":{

              "type":"keyword"

            }

          }

        }             

      ]        

     }     

  }

}'

添加数据:

  curl -XPOST localhost:9200/my_index/my_type -d '{

    "str_es":"xxx",

    "long_es":124,

    "date_es":"2017-09-12",

    "long_en":123,

    "str_en":"sxx",

    "date_en":"2017-09-12"

  }'

查询mapping结果:http://localhost:9200/my_index/_mapping?pretty

{
  "my_index" : {
    "mappings" : {
      "my_type" : {
        "dynamic_templates" : [
          {
            "es" : {
              "match" : "*_es",
              "match_mapping_type" : "string",
              "mapping" : {
                "anaylzer" : "spanish",
                "type" : "text"
              }
            }
          },
          {
            "en" : {
              "match" : "*",
              "match_mapping_type" : "string",
              "mapping" : {
                "anaylzer" : "english",
                "type" : "text"
              }
            }
          },
          {
            "date" : {
              "unmatch" : "*_es",
              "match_mapping_type" : "date",
              "mapping" : {
                "type" : "keyword"
              }
            }
          }
        ],
        "properties" : {
          "date_en" : {
            "type" : "keyword"  #匹配date模板的unmatch:"*_es",date->keyword
          },
          "date_es" : {
            "type" : "date"
          },
          "long_en" : {
            "type" : "long"
          },
          "long_es" : {
            "type" : "long"
          },
          "str_en" : {
            "type" : "text"    #匹配到en模板的"*",string->text
          },
          "str_es" : {
            "type" : "text"    #匹配到es模板的"*_es",string->text
          }
        }
      }
    }
  }
}

第二种情况,在索引模板中定义动态模板

curl -XPUT localhost:9200/_template/template_1 -d '  

{  

    "template" : "es*",  

  "order":1,

    "settings" : {  

         "number_of_shards" : 2

    },  

    "mappings" : {  

         "_default_" : {  

             "_source" : {"enabled" : true } ,

    "_all":{"enabled":false},

    "properties":{

      "date":{"type":"date"}

    },

     "dynamic_templates":[                 

    {                     

      "int":{                                                             

         "match":"*",                                                

         "match_mapping_type":"long",                               

         "mapping":{                                                        

          "type":"integer"                         

        }                     

      }                  

     }

    ]

  }

 }

}'

创建索引

curl -XPUT 'localhost:9200/estest/my_test/1' -d '{

  "age":23,

  "name":"Tom",

  "test_es":234,

  "date":"2017-09-07",

  "text":"The quick & brown fox & &."

}'

查看mapping:http://localhost:9200/estest/_mapping?pretty

{
  "estest" : {
    "mappings" : {
      "my_test" : {
        "_all" : {
          "enabled" : false
        },
        "dynamic_templates" : [
          {
            "int" : {
              "match" : "*",
              "match_mapping_type" : "long",
              "mapping" : {
                "type" : "integer"
              }
            }
          }
        ],
        "properties" : {
          "age" : {
            "type" : "integer"  #匹配int模板,long->integer
          },
          "date" : {
            "type" : "date"
          },
          "name" : {
            "type" : "text",
            "fields" : {
              "keyword" : {
                "type" : "keyword",
                "ignore_above" : 256
              }
            }
          },
          "test_es" : {
            "type" : "integer"  #匹配int模板,long->integer
          },
          "text" : {
            "type" : "text",
            "fields" : {
              "keyword" : {
                "type" : "keyword",
                "ignore_above" : 256
              }
            }
          }
        }
      },
      "_default_" : {
        "_all" : {
          "enabled" : false
        },
        "dynamic_templates" : [
          {
            "int" : {
              "match" : "*",
              "match_mapping_type" : "long",
              "mapping" : {
                "type" : "integer"
              }
            }
          }
        ],
        "properties" : {
          "date" : {
            "type" : "date"
          }
        }
      }
    }
  }
}
还有不清楚的可以看官网:https://www.elastic.co/guide/en/elasticsearch/reference/current/dynamic-templates.html

猜你喜欢

转载自blog.csdn.net/qq_39669058/article/details/88169150