zoukankan      html  css  js  c++  java
  • 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":  # 关键词,固定的
          [                     # 必须是中括号
             {                    
               "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

  • 相关阅读:
    【原创】elasticsearch入门
    【原创】nginx入门
    【原创】SpringMVC同一RequestMapping返回不同的类型
    [原创]在Centos7.2上源码安装PHP、Nginx、Zentao禅道
    CentOS环境下tomcat启动超级慢的解决方案
    [原创]Nginx反向代理及负载均衡
    常见证书格式和转换
    MySQL基本命令
    研究重力加速度随地球纬度递增的原因
    倒霉的一天
  • 原文地址:https://www.cnblogs.com/zhb-php/p/7510233.html
Copyright © 2011-2022 走看看