【ElasticSearch入门】6、Index Template和Dynamic Template

【ElasticSearch入门】6、Index Template和Dynamic Template

集群上的索引会越来越多,例如,你会为日志每天创建个索引
使用多个索引可以让你的更好的管理的你数据,提高性能

一、Index Template

Index Templates 帮助你设定 Mapping 和 Settings,并按照一定的规则,自动匹配到新创建的索引之上
模板仅在一个索引被新创建时,才会产生作用。修改模板不会影响已创建的索引
可以设定多个索引模板,这些设置会被 merge 在一起
可以指定 order 的数值,控制 merging 的过程

两个 Index Templates

img

右边的mapping设置日期探测关闭,数字探测打开。

Index Template 工作方式

当一个索引被新创建时

  1. 应用 Elasticsearch默认的 settings 和 mappings
  2. 应该 order 数值低的 Index Template 中的设定
  3. 应用 order 高的 Index Template 中的设定,之前的设定会被覆盖
  4. 应用创建索引时,用户所指定的 Settings 和 Mappings,并覆盖之前模板中的设定

demo

首先进行默认的dynamic mapping 的写入

PUT ttemplate/_doc/1
{
  "someNumber":"1",
  "sumeDate":"2022/05/21"
}

GET ttemplate/_mapping

查看索引mapping信息

image-20220521183724333

someDate字段默认被转化成为date类型

我们这时创建两个index template

#Create a default template
PUT _template/template_default
{
    //前缀匹配
  "index_patterns": ["*"],
    //order值,越大级别越高
  "order" : 0,
  "version": 1,
  "settings": {
    "number_of_shards": 1,
    "number_of_replicas":1
  }
}


PUT /_template/template_test
{
    "index_patterns" : ["test*"],
    "order" : 1,
    "settings" : {
    	"number_of_shards": 1,
        "number_of_replicas" : 2
    },
    "mappings" : {
        //将日期探测设置为false
    	"date_detection": false,
    	"numeric_detection": true
    }
}

我们根据template规则创建新的index

#Create a default template
PUT _template/template_default
{
  "index_patterns": ["*"],
  "order" : 0,
  "version": 1,
  "settings": {
    "number_of_shards": 1,
    "number_of_replicas":1
  }
}
PUT /_template/template_test
{
    "index_patterns" : ["test*"],
    "order" : 1,
    "settings" : {
    	"number_of_shards": 1,
        "number_of_replicas" : 2
    },
    "mappings" : {
    	"date_detection": false,
    	"numeric_detection": true
    }
}

image-20220521184138460

并且在replicas也设置为order数较大template所指定的2

image-20220521184255733

二、Dynamic Template

根据 Elasticsearch 识别的数据类型,结合字段名称,来动态设定字段类型

  • 所有的字符串类型都设定称 Keyword,或者关闭 keyword 字段
  • is 开头的字段都设置成 boolean
  • long_ 开头的都设置成 long 类型

官网说明:

img

img

  • Dynamic Template 是定义在某个索引的 Mapping 中
  • Template 有个名字
  • 匹配规则是个一个数组
  • 为匹配到字段设置 Mapping

demo

先看没有使用dynamic mapping的情况

PUT my_index/_doc/1
{
  "firstName":"Ruan",
  "isVip":"true"
}

image-20220521184834522

都是text类型

下面我们创建 dynamic mapping

PUT my_index
{
  "mappings": {
    "dynamic_templates": [
      {
        "full_name": {
            //匹配所有name开头的字段
          "path_match":   "name.*",
            //不匹配中间为middle的字段
          "path_unmatch": "*.middle",
          "mapping": {
            "type":       "text",
              //copy_to fullname
            "copy_to":    "full_name"
          }
        }
      }
    ]
  }
}

下面插入doc

PUT my_index/_doc/1
{
  "name": {
    "first":  "John",
    "middle": "Winston",
    "last":   "Lennon"
  }
}
GET my_index/_search?q=full_name:John

搜索成功!

image-20220521185009149

fullname搜索如果换为middle name 的Winston 则查找不到

image-20220521185038326

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值