共计 2752 个字符,预计需要花费 7 分钟才能阅读完成。
[toc]
一、Index Template 简介
1. 什么是 index 模板?
帮忙你设定
mappings
和settings
; 并依照肯定的规定,主动匹配到新建的索引
上;
2. 对于 index 模板的几个问题
Q1: 已新建了索引 A 应用了模板 M, 批改了 M 后会影响 A 吗?
A: 不会! 模板仅仅在一个索引被创立时,才产生作用。批改模板不会影响曾经创立的索引。
Q2: 可否设定应用多个 index 模板?
A: 能够! 设定多个索引模板,这些模板会被
merge
在一起。
Q3: 设定多个 index 模板,起作用是按什么程序?
A: 你能够指定
order
的数值,管制merging
的过程。order 大的无限起作用!
二、index template 案例
2.1 两个模板定义和创立索引的作用优先级
2.1.1 模板 1 设定所有索引创立时 -> 分片数 1,正本数 1
# 1. 所有索引:分片数 1,正本数 1
PUT _template/my_template
{"index_patterns": ["*"],
"order": 10, // order 大的优先
"version": 1,
"settings": {
"number_of_shards": 1,
"number_of_replicas": 1
}
}
2.1.2 模板 2 设定 test 结尾的索引设置主分片 1,正本数 2; 敞开 date 辨认,开启数字辨认
- date 辨认 (date_detection) 就是:字符串的日期,辨认为 date(默认是开启的)
- 数字辨认 (numeric_detection) 就是:字符串的数字,辨认为数字类型(默认是敞开的);
#2.test 结尾的索引设置主分片 1,正本数 2; 敞开 date 辨认,开启数字辨认
PUT _template/my_template_test
{"index_patterns": ["test*"],
"order": 1,
"settings":{
"number_of_shards": 1,
"number_of_replicas": 2
},
"mappings":{
"date_detection": false,
"numeric_detection": true
}
}
2.1.3 创立 test 结尾的索引,验证
PUT test_template_index/_doc/1
{
"someNumber": "1",
"somDate": "2019/01/01"
}
看看作用成果:
GET test_template_index/_mapping
看看后果:
{
"test_template_index" : {
"mappings" : {
"date_detection" : false,
"numeric_detection" : true,
"properties" : {
"somDate" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
}
},
"someNumber" : {"type" : "long"}
}
}
}
}
可见模板 2 起作用了:somDate 被辨认为 text 而非 date; someNumber 被辨认为 long 而非 text 了;
默认的话,somDate 是会被辨认为
date
, someNumber 会被辨认为text
的!
咱们再看看对于 shards
和replicas
的数量,谁的起作用了:
GET test_template_index/_settings
看看后果:两个都是 1
{
"test_template_index" : {
"settings" : {
"index" : {
"creation_date" : "1650989910135",
"number_of_shards" : "1",
"number_of_replicas" : "1",
"uuid" : "HdvbZrC8SwCH9xA3CbzFxg",
"version" : {"created" : "7050299"},
"provided_name" : "test_template_index"
}
}
}
}
看来这个是
模板 1
起作用了,order 大的被抉择了!
所以论断:
- 多个模板匹配的话,都会启用
- 最初将所有配置 merge, order 大的会笼罩小的中的配置;
三、Dynamic Template 简介
3.1 什么是动静模板?
次要用来动静设定字段类型:依据 ES 辨认的数据类型,联合
字段名称
来动静设定字段类型。举例:
- 设置所有字符串类型都为
keyword
, 或者敞开 text 类型的keyword
子字段;- is 结尾的字段都设定为
boolean
;- long_结尾的字段都设定为
long
类型;
3.2 动静模板留神
- 是定义在
某个索引
的mappings
中 –> 区别于 index template; - template 有一个名称;
- 匹配规定为一个数组;
- 为匹配字段设置 mapping;
3.3 动静模板的例子
指定某个索引的 is* 辨认为 boolean;字符串都设为 keyword
例 1 - 动静模板设定:
PUT my_dynamic_template_index
{
"mappings": {
"dynamic_templates": [
{
"is_x_to_boolean": { // 自定义名称
"match_mapping_type": "string",
"match": "is*",
"mapping": {"type": "boolean"}
}
},
{
"string_to_keyword": { // 自定义名称
"match_mapping_type": "string",
"mapping": {"type": "keyword"}
}
}
]
}
}
留神:dynamic_templates
是个数组,其中每个对象是一个动静模板,每个模板有一个自定义的名字:
例 1 - 动静模板测试:
PUT my_dynamic_template_index/_doc/1
{"firstName":"Nie", "isVip":"true"}
查看 mapping:
GET my_dynamic_template_index/_mapping
后果:
{
"my_dynamic_template_index" : {
"mappings" : {
"dynamic_templates" : [
{
"is_x_to_boolean" : {
"match" : "is*",
"match_mapping_type" : "string",
"mapping" : {"type" : "boolean"}
}
},
{
"string_to_keyword" : {
"match_mapping_type" : "string",
"mapping" : {"type" : "keyword"}
}
}
],
"properties" : {
"firstName" : {"type" : "keyword"},
"isVip" : {"type" : "boolean"}
}
}
}
}
能够看到起作用了。
正文完
发表至: elasticsearch
2022-04-27