当前位置:   article > 正文

elasticsearch中模板的创建和使用_es 创建模板语法

es 创建模板语法

template是es集群内快速生成批量索引的一种快捷方式。
官方解释: 模板是一种在索引创建时配置索引的方法。

7.x之后ES支持两种模板创建方式,一种是传统的或者叫普通的创建方式,即在一次请求中指定 mappings, settings, and aliases等模板的内容; 另一种component类型,可以以模板式分多次配置mappings, settings, and aliases等内容,且一个模块可被多个索引模板引用。

这里主要为探究模板是如果发生作用的,使用传统模式创建索引模板。

在系统内创建一个索引模板my_template

PUT _template/my_template
{
  "index_patterns": ["mytest*"],
  "settings": {
    "number_of_shards": 2,
    "number_of_replicas": 1
  },
  "mappings": {
    "_source": {
      "enabled": false
    },
    "properties": {
      "host_name": {
        "type": "keyword"
      },
      "created_at": {
        "type": "date",
        "format": "EEE MMM dd HH:mm:ss Z yyyy"
      }
    }
  }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

之前一直在迷惑es中如何通过索引模板来快速生成索引,以及索引模板如何约束新创建的索引。

索引模板创建完成后

创建一个索引,索引名要能匹配索引模板中"index_patterns" 所指定的值,然后在创建出来的索引如果没有显示的声明,则所有配置都会与索引模板的设置保持一致。

参考下面的例子:

#创建一个索引
PUT mytest-1
GET mytest-1
  • 1
  • 2
  • 3

索引mytest-1的内容

{
“mytest-1”: {
“aliases”: {},
“mappings”: {
“_source”: {
“enabled”: false
},
“properties”: {
“created_at”: {
“type”: “date”,
“format”: “EEE MMM dd HH:mm:ss Z yyyy”
},
“host_name”: {
“type”: “keyword”
}
}
},
“settings”: {
“index”: {
“routing”: {
“allocation”: {
“include”: {
“_tier_preference”: “data_content”
}
}
},
“number_of_shards”: “2”,
“provided_name”: “mytest-1”,
“creation_date”: “1721125235810”,
“number_of_replicas”: “1”,
“uuid”: “viz9-DEpQheYzJkIlatg6A”,
“version”: {
“created”: “8500010”
}
}
}
}
}

在创建索引时未指定任何内容,自动应用了模板的settings和mapping; 避免每次索引创建时都需要声明settings和字段映射; 或者约束自动创建索引的mapping和setting。

现次创建一个索引,这次指定副本数为3

PUT /mytest-2
{
  "settings": {
    "index": {
      "number_of_replicas": 3
    }
  }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

查看索引内容

GET  mytest-2
  • 1

内容

{
“mytest-2”: {
“aliases”: {},
“mappings”: {
“_source”: {
“enabled”: false
},
“properties”: {
“created_at”: {
“type”: “date”,
“format”: “EEE MMM dd HH:mm:ss Z yyyy”
},
“host_name”: {
“type”: “keyword”
}
}
},
“settings”: {
“index”: {
“routing”: {
“allocation”: {
“include”: {
“_tier_preference”: “data_content”
}
}
},
“number_of_shards”: “2”,
“provided_name”: “mytest-2”,
“creation_date”: “1721125273084”,
“number_of_replicas”: “3”,
“uuid”: “oWTDY9RLSterXOizHzGzRw”,
“version”: {
“created”: “8500010”
}
}
}
}
}

因为创建索引时指定了索引副本数,指定的值覆盖了引用索引模板提供的值。

另外创建一个索引mytest-3,,增加两个字段

PUT /mytest-3
{
  "mappings": {
    "properties": {
      "host_alias": {
        "type": "keyword"
      },
      "delete_at": {
        "type": "date",
        "format": "EEE MMM dd HH:mm:ss Z yyyy"
      }
    }
  }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

再次查看一下索引内容

{
“mytest-3”: {
“aliases”: {},
“mappings”: {
“_source”: {
“enabled”: false
},
“properties”: {
“created_at”: {
“type”: “date”,
“format”: “EEE MMM dd HH:mm:ss Z yyyy”
},
“delete_at”: {
“type”: “date”,
“format”: “EEE MMM dd HH:mm:ss Z yyyy”
},
“host_alias”: {
“type”: “keyword”
},
“host_name”: {
“type”: “keyword”
}
}
},
“settings”: {
“index”: {
“routing”: {
“allocation”: {
“include”: {
“_tier_preference”: “data_content”
}
}
},
“number_of_shards”: “2”,
“provided_name”: “mytest-3”,
“creation_date”: “1721125461890”,
“number_of_replicas”: “1”,
“uuid”: “5Es-Ht1MQR-Yg1SPEeWr4w”,
“version”: {
“created”: “8500010”
}
}
}
}
}

索引mytest-3在模板的基础上,增加了两个字段,其他的配置与模板保持一致。

综上,索引模板的生效是索引在创建时,如果索引名匹配上了集群内模板的匹配规则,则创建索引时引用模板内指定的settings和mapping等内容; 如果匹配了多个模板刚根据优先级判断生效的值 ; 如果在索引创建时显示的指定字段或配置,最终索引的配置和字段是创建索引时指定的内容和模板内容的合集,如果与模板内的配置或字段一致,则创建索引时指定的内容优先级高覆盖模板指定的值。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/天景科技苑/article/detail/860858
推荐阅读
相关标签
  

闽ICP备14008679号