Elasticsearch系列-Templates


在之前的mapping文章中介绍到,我们可以对索引进行一些配置信息设置,但是都是在单个索引上进行设置。在实际开发中,我们可能需要创建不止一个索引,但是每个索引或多或少都有一些共性。比如我们在设计关系型数据库时,一般都会为每个表结构设计一些常用的字段,比如:创建时间,更新时间,备注信息等。elasticsearch在创建索引的时候,就引入了模板的概念,你可以先设置一些通用的模板,在创建索引的时候,elasticsearch会先根据你创建的模板对索引进行设置。elasticsearch中提供了很多的默认设置模板,这就是为什么我们在新建文档的时候,可以为你自动设置一些信息,做一些字段转换等。elasticsearch提供了两种方式去创建模板:

  • Component Template
  • Index Template

Component Template

通过组件模板,我们可以设置一些通用的信息,比如我们创建一个通用的修改信息字段模板。我们可以设置mapping,setting等信息。创建组件模板的时候,可以看到他并不是面向索引的。

//创建命令
PUT /_component_template/<component-template>
//查询
GET /_component-template/<component-template>

Index Template

Index Template顾名思义就是索引模板,他是直接面向索引创建的一些模板。我们可以通过index_patterns参数去设置匹配的索引信息。上文中介绍了Component Template,但是没有说到怎么去使用,在Index Template中可以通过composed_of参数来引入Component Template。可以说,Component Template是为了更方便的去创建Index Template。

//创建
PUT /_index_template/<index-template>
//查询
GET /_index_template/<index-template>

Dynamic Template

其实在elasticsearch中,还有一种方式就是dynamic template。这个是在具体的mapping中去设置,比如在创建索引的时候,我们可以设置一些特殊的转换,比如:在针对一些特殊的文本信息字段,我们需要将以long_开头的字段信息,设置为类型为long,但是以text结尾的则不需要转换为long类型。

优先级

我们可以知道,在elasticsearch中我们可以创建很多的Index Template,但是这么多的模板怎么去使用呢。到底该引用哪个模板信息呢?其实在创建Index Template时,有一个字段priority可以设置模板的优先级,值越高优先级越高。但是在创建索引的时候,如果我们单独设置了mapping,setting等信息,就会覆盖掉Index Template里面设置的信息。

示例

我们在kibana开发工具中执行:

//创建一个组件模板,设置create_time字段信息
PUT /_component_template/create_time_template
{
  "template":{
    "mappings": {
      "properties": {
        "create_time":{
          "type": "date",
          "format" : "yyyy/MM/dd HH:mm:ss||yyyy/MM/dd||epoch_millis"
        }
      }
    }
  }
}
//创建一个组件模板 设置备注信息字段
PUT /_component_template/remark_template
{
  "template":{
    "mappings": {
      "properties": {
        "remark":{
          "type": "text"
        }
      }
    }
  }
}

//查看组件模板信息,会看到有很多的默认组件模板信息
GET /_component_template

//创建一个索引模板 并引入之前创建的组件模板
PUT /_index_template/base_template
{
  "index_patterns": ["layne*"],
  "template":{
    "mappings":{
      "properties":{
        "update_time":{
          "type": "date",
          "format" : "yyyy/MM/dd HH:mm:ss||yyyy/MM/dd||epoch_millis"
        }
      }
    },
    "settings":{
      "number_of_shards":2
    }
  },
  "composed_of":["create_time_template","remark_template"],
  "priority":1
}

//查看索引模板信息,这里同样会看到有很多的默认模板信息
GET /_index_template

//创建一个索引
PUT layne-template

//查看索引信息
GET layne-template
//返回结果信息:
{
  "layne-template" : {
    "aliases" : { },
    "mappings" : {
      "properties" : {
        "create_time" : {
          "type" : "date",
          "format" : "yyyy/MM/dd HH:mm:ss||yyyy/MM/dd||epoch_millis"
        },
        "remark" : {
          "type" : "text"
        },
        "update_time" : {
          "type" : "date",
          "format" : "yyyy/MM/dd HH:mm:ss||yyyy/MM/dd||epoch_millis"
        }
      }
    },
    "settings" : {
      "index" : {
        "routing" : {
          "allocation" : {
            "include" : {
              "_tier_preference" : "data_content"
            }
          }
        },
        "number_of_shards" : "2",
        "provided_name" : "layne-template",
        "creation_date" : "1619060563145",
        "number_of_replicas" : "1",
        "uuid" : "MGOF3ycfRz65KM2S00pIcQ",
        "version" : {
          "created" : "7120099"
        }
      }
    }
  }
}

//在创建一个索引模板,优先级比之前的高
PUT /_index_template/pri_template
{
  "index_patterns": ["layne*"],
  "template":{
    "settings":{
      "number_of_shards":3
    }
  },
  "priority":2
}

//查看索引模板信息
GET /_index_template/*_template

//创建一个索引
PUT /layne-template-pri

//查看索引信息 可以发现索引引用的是优先级高的索引配置
GET /layne-template-pri
//返回结果信息:
{
  "layne-template-pri" : {
    "aliases" : { },
    "mappings" : { },
    "settings" : {
      "index" : {
        "routing" : {
          "allocation" : {
            "include" : {
              "_tier_preference" : "data_content"
            }
          }
        },
        "number_of_shards" : "3",
        "provided_name" : "layne-template-pri",
        "creation_date" : "1619060867189",
        "number_of_replicas" : "1",
        "uuid" : "s6yOYwwhSQa6WB5OjHOFjw",
        "version" : {
          "created" : "7120099"
        }
      }
    }
  }
}

//创建一个索引,并设置mapping信息,以及dynamic template信息
PUT /layne-template-dynamic
{
  "mappings": {
    "properties": {
      "update_name":{
        "type": "text"
      },
       "update_time":{
          "type": "date",
          "format" : "yyyy/MM/dd HH:mm:ss||yyyy/MM/dd"
        }
    },
    "dynamic_templates":[
      {
        "long_as_integer":{
          "match_mapping_type":"string",
          "match":"long_*",
          "unmatch":"*_text",
          "mapping":{
            "type":"long"
          }
        }
      }
    ]
  },
  "settings": {
    "number_of_shards": 4
  }
}

//查看索引信息
GET /layne-template-dynamic
//返回结果信息:
{
  "layne-template-dynamic" : {
    "aliases" : { },
    "mappings" : {
      "dynamic_templates" : [
        {
          "long_as_integer" : {
            "match" : "long_*",
            "unmatch" : "*_text",
            "match_mapping_type" : "string",
            "mapping" : {
              "type" : "long"
            }
          }
        }
      ],
      "properties" : {
        "update_name" : {
          "type" : "text"
        },
        "update_time" : {
          "type" : "date",
          "format" : "yyyy/MM/dd HH:mm:ss||yyyy/MM/dd"
        }
      }
    },
    "settings" : {
      "index" : {
        "routing" : {
          "allocation" : {
            "include" : {
              "_tier_preference" : "data_content"
            }
          }
        },
        "number_of_shards" : "4",
        "provided_name" : "layne-template-dynamic",
        "creation_date" : "1619063829876",
        "number_of_replicas" : "1",
        "uuid" : "0X_n7r4OQMyp9RRvXCi2tw",
        "version" : {
          "created" : "7120099"
        }
      }
    }
  }
}

//新建一个文档信息
POST /layne-template-dynamic/_doc
{
  "long_id":"123456",
  "long_text":"this is dynamic template test"
}

//查看索引配置信息 可以看到新创建的两个字段按照我们设置的规则进行类型转换
GET /layne-template-dynamic
//返回结果信息:
{
  "layne-template-dynamic" : {
    "aliases" : { },
    "mappings" : {
      "dynamic_templates" : [
        {
          "long_as_integer" : {
            "match" : "long_*",
            "unmatch" : "*_text",
            "match_mapping_type" : "string",
            "mapping" : {
              "type" : "long"
            }
          }
        }
      ],
      "properties" : {
        "long_id" : {
          "type" : "long"
        },
        "long_text" : {
          "type" : "text",
          "fields" : {
            "keyword" : {
              "type" : "keyword",
              "ignore_above" : 256
            }
          }
        },
        "update_name" : {
          "type" : "text"
        },
        "update_time" : {
          "type" : "date",
          "format" : "yyyy/MM/dd HH:mm:ss||yyyy/MM/dd"
        }
      }
    },
    "settings" : {
      "index" : {
        "routing" : {
          "allocation" : {
            "include" : {
              "_tier_preference" : "data_content"
            }
          }
        },
        "number_of_shards" : "4",
        "provided_name" : "layne-template-dynamic",
        "creation_date" : "1619063829876",
        "number_of_replicas" : "1",
        "uuid" : "0X_n7r4OQMyp9RRvXCi2tw",
        "version" : {
          "created" : "7120099"
        }
      }
    }
  }
}

结语

通过这种模板的方式,我们可以设置很多的通用模板,避免很多的重复操作,就像我们在写代码一样,最怕代码冗余了。其实模板提供了很多的功能性作用,想要了解更多详细内容,可以去官网多看看。
Index template
Dynamic template
Index REST API

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Layne_lei

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值