添加模板
PUT _template/demo_tpl
{
"order": 0,
"index_patterns": [
"demo_*"
],
"settings": {
"index": {
"max_result_window": "10000000",
"max_ngram_diff": "15",
"refresh_interval": "1s",
"analysis": {
"analyzer": {
"demo_custom_std_analyzer": {
"filter": [
"lowercase"
],
"char_filter": [
"demo_remove_char_filter",
"html_strip"
],
"tokenizer": "standard"
},
"demo_analyzer": {
"filter": "lowercase",
"tokenizer": "demo_tokenizer"
}
},
"char_filter": {
"demo_remove_char_filter": {
"type": "mapping",
"mappings": [
"""\\n => ' '""",
"""\\r => ' '""",
"""\\t => ' '"""
]
}
},
"tokenizer": {
"demo_tokenizer": {
"token_chars": [
"letter",
"digit"
],
"min_gram": "2",
"type": "ngram",
"max_gram": "15"
}
}
},
"number_of_shards": "6",
"number_of_replicas": "1"
}
},
"mappings": {
"properties": {
"msg": {
"analyzer": "demo_analyzer",
"type": "text",
"fields": {
"keyword": {
"ignore_above": 256,
"type": "keyword"
}
}
},
"fullText": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
},
"analyzer": "demo_custom_std_analyzer"
},
"id": {
"ignore_above": 256,
"type": "keyword"
}
}
},
"aliases": {
"{index}-alias" : {}
}
}
获取/删除 模板
GET _template/demo_tpl
DELETE _template/demo_tpl
Index template 仅在 index 创建期间应用(包括自动写入数据创建)。 对 index template 的更改不会影响现有索引。 create index API 请求中指定的设置和映射会覆盖索引模板中指定的任何设置或映射。
覆盖模板配置
这样制定配置覆盖模板中的参数
PUT demo_202406
{
"settings": {
"number_of_shards": 3,
"number_of_replicas": 2
}
}
也可以添加索引,模板相当于这个mapping中固有的一段语句,之后可以删除修改
PUT demo_202406/_mapping
{
"properties": {
"type": {
"type": "integer"
}
}
}
Index 匹配多个 template
多个索引模板可能与索引匹配,在这种情况下,设置和映射都合并到索引的最终配置中。 可以使用 order 参数控制合并的顺序,首先应用较低的顺序,高的覆盖低的。 例如:
PUT /_template/template_1
{
"index_patterns" : ["*"],
"order" : 0,
"settings" : {
"number_of_shards" : 1
},
"mappings" : {
"_source" : { "enabled" : false }
}
}
PUT /_template/template_2
{
"index_patterns" : ["te*"],
"order" : 1,
"settings" : {
"number_of_shards" : 1
},
"mappings" : {
"_source" : { "enabled" : true }
}
}
以上的 template_1 将禁用存储 _source,但对于以 te * 开头的索引,仍将启用 _source。 注意,对于映射,合并是 “深度” 的,这意味着可以在高阶模板上轻松添加/覆盖特定的基于对象/属性的映射,而较低阶模板提供基础。
我们可以来创建一个例子看看:
PUT test10
GET test10
显示的结果是:
{
"test10" : {
"aliases" : { },
"mappings" : { },
"settings" : {
"index" : {
"creation_date" : "1567654333181",
"number_of_shards" : "1",
"number_of_replicas" : "1",
"uuid" : "iEwaQFl9RAKyTt79PduN-Q",
"version" : {
"created" : "7030099"
},
"provided_name" : "test10"
}
}
}
}
如果我们创建另外一个不是以 “te” 开头的 index,我们可以看看如下的情况:
PUT my_test_index
GET my_test_index
显示的结果是:
{
"my_test_index" : {
"aliases" : { },
"mappings" : {
"_source" : {
"enabled" : false
}
},
"settings" : {
"index" : {
"creation_date" : "1567654713059",
"number_of_shards" : "1",
"number_of_replicas" : "1",
"uuid" : "aSsIZMT2RyWKT44G2dF2zg",
"version" : {
"created" : "7030099"
},
"provided_name" : "my_test_index"
}
}
}
}
显然在 mappings 里显示 source 是被禁止的。
如果对于两个 templates 来说,如果 order 是一样的话,我们可能陷于一种不可知论的合并状态。在实际的使用中必须避免