网站首页 > 技术文章 正文
ES(8.1)认证工程师考题大纲参考如下
ES(8.1)认证题目
1、题目
今天咱们讨论的是《索引模板的创建与使用》
大体思路如下:分两部分处理、第一部分是先创建索引模板、第二部分使用索引模板。在创建索引模板之前我们先理解一下什么是索引模板、然后我们带着以下几个问题进行阅读本文
- 什么是索引模版
- 索引模版有什么用,使用场景有哪些
- 索引模版如何创建
- 如何使用索引模版
2、解答
2.1、什么是索引模版
索引模版是创建索引时自动应用提前设置好的settings、mappings和aliases,通过索引的名称进行匹配
对索引模版的更改时不会影响目前已经根据索引模版创建的索引
2.2、索引模版有什么用,使用场景有哪些
使用索引模版可以省去创建索引时再次指定settings、mappings、aliases的步骤,具体的应用场景比较常用的就有日志索引。
需求如下:查询日志索引名称为log,每天根据当天日期生成索引(log-20221022),所有的索引使用相同的settings和mappings,且alias指向最新日期的log索引那么我们就可以使用索引模版来实现,索引模版如何创建呢,其实很简单,与普通的创建索引差别不大,具体如下
2.3、索引模版创建
创建索引需要参数,那么创建索引模版也有参数控制,可以使用的参数如下
- index_patterns: 必须的参数,使用通配符定义匹配索引的规则
- priority:可选的参数,索引模版的匹配优先级,如果不填默认0(最低优先级),多个模版时,优先匹配优先级高的模版
- template:可选参数,但是我认为是必须的,少了这个参数,索引模版的意义在哪呢是不是,可以说是核心参数。可以配置索引的settings,mappings,aliases
- filter可选,对象类型,限制别名能访问的文档
- index_routing可选,字符串,索引操作时的路由值,如果指定会覆盖routing的值
- is_hidden可选,布尔类型,如果设置为true,隐藏别名。默认false,该别名指定的所有索引必须有相同的is_hidden值
- is_write_index可选,布尔类型,如果设置为true,该索引为别名的写索引
- routing可选,字符串,索引和搜索操作时的路由值
- search_routing可选,字符串,搜索操作时的路由值,如果指定会覆盖routing的值
- settings索引的settings设置,可参考上一篇文章中settings的部分**(关注微信公众号《醉鱼Java》获取)**
- mappings索引的mappings设置,可参考上一篇文章中mappings的部分**(关注微信公众号《醉鱼Java》获取)**
- aliases对象形式,key是别名的名称,并且还支持如下参数
- version索引模版的版本号,Elasticsearch不会自动生成
- composed_of可选,字符串数组,可选可使用的组件模版的有序数组。按照数组中组件模版的顺序合并,最后一个模版具有最高的优先级
- data_stream可选,对象类型,如果索引模版中包含该该对象,可以是空对象,则使用模版创建索引数据流和支持的索引支持如下参数
- hidden:可选,布尔类型,如果为true,数据流隐藏,默认false
- allow_custom_routing:可选,布尔类型,如果为true,则数据流支持自定义路由,默认false
- _meta可选,对象类型,该索引模版的用户元数据配置
通过上面几个参数即可创建一个可用的索引模版,创建一个基础可用的索引模版只需要必选参数即可,例如:
PUT /_index_template/log_template
{
"index_patterns": "log*",
"priority": "1",
"template": {
"settings": {
"number_of_shards": "1",
"number_of_replicas": "1"
},
"mappings": {
"properties": {
"creater":{
"type":"keyword"
},
"module":{
"type":"keyword"
},
"content":{
"type":"text",
"fields":{
"keyword":{
"type":"keyword"
}
}
},
"createtime": {
"type": "date",
"format": "strict_date_optional_time||epoch_millis"
}
}
},
"aliases":{
"log":{}
}
}
}
2.4、使用索引模版
2.4.1、通过索引模版创建索引
以上面创建的索引模版为例,索引名以log开头的索引都会自动使用索引模版创建
PUT /log-2022-10-22-01
此时查看生成的索引log-2022-10-22-01如下
GET /log-2022-10-22-01
# 返回如下
{
"log-2022-10-22-01" : {
"aliases" : {
"log" : { }
},
"mappings" : {
"properties" : {
"content" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword"
}
}
},
"creater" : {
"type" : "keyword"
},
"createtime" : {
"type" : "date"
},
"module" : {
"type" : "keyword"
}
}
},
"settings" : {
"index" : {
"routing" : {
"allocation" : {
"include" : {
"_tier_preference" : "data_content"
}
}
},
"number_of_shards" : "1",
"provided_name" : "log-2022-10-22-01",
"creation_date" : "1666523830900",
"number_of_replicas" : "1",
"uuid" : "WouYSIukSIGucYs_grWkZw",
"version" : {
"created" : "8010399"
}
}
}
}
}
实际使用中不可能只有一个模版,那么我们创建索引时该怎么选择呢,下面咱们来一起测试下
2.4.2、同时匹配到多个索引模版怎么选择
- 首先在创建一个索引模版,匹配模式设置*,优先级设置2,该my_log_template模版createtime字段设置为keyword,上面log_template模版设置createtime为date类型,Elasticsearch如何选择测试即知
PUT /_index_template/my_log_template
{
"index_patterns":"*",
"priority":"2",
"template":{
"mappings":{
"properties":{
"createtime":{
"type":"keyword"
},
"my_test_field":{
"type":"keyword"
}
}
}
}
}
- 创建索引查看生成的createtime类型
PUT /log-2022-10-23-01
GET /log-2022-10-23-01/_mapping
# 返回如下
{
"log-2022-10-23-01" : {
"mappings" : {
"properties" : {
"createtime" : {
"type" : "keyword"
},
"my_test_field" : {
"type" : "keyword"
}
}
}
}
}
可以看到后面创建的索引模版my_log_template优先级为2,索引匹配到多个模版时优先使用优先级高的模版
2.4.3、使用索引模版创建索引别名
在上面创建的索引模版log_template中,创建索引时会自动给索引添加别名log,别名操作的部分语句如下
# 添加别名,对log开头的索引添加别名logs
POST _aliases
{
"actions": [
{
"add": {
"index": "log-*",
"alias": "logs"
}
}
]
}
# 删除别名,删除索引logs-nginx的别名logs
POST _aliases
{
"actions": [
{
"remove": {
"index": "logs-nginx",
"alias": "logs"
}
}
]
}
2.4.4、组件模版创建
- 创建组件模版settings
PUT _component_template/zuiyu-settings
{
"template": {
"settings": {
"index.lifecycle.name": "my-lifecycle-policy"
}
},
"_meta": {
"description": "Settings for ILM",
"my-custom-meta-field": "More arbitrary metadata"
}
}
- 创建组件模版mappings
PUT _component_template/zuiyu-mappings
{
"template": {
"mappings": {
"properties": {
"@timestamp": {
"type": "date",
"format": "date_optional_time||epoch_millis"
},
"message": {
"type": "wildcard"
}
}
}
},
"_meta": {
"description": "Mappings for @timestamp and message fields",
"my-custom-meta-field": "More arbitrary metadata"
}
}
- 使用组件模版创建索引模版如下创建的为数据流模版,包含了空对象data_stream,具体数据流的使用可关注公众号《醉鱼Java》,获取后续文章的最新更新
PUT _index_template/zuiyu-index-template
{
"index_patterns": ["zuiyu-data-stream*"],
"data_stream": { },
"composed_of": [ "zuiyu-mappings", "zuiyu-settings" ],
"priority": 500,
"_meta": {
"description": "Template for my time series data",
"my-custom-meta-field": "More arbitrary metadata"
}
}
2.4.5、索引模版的删除
DELETE /_template/<index-template>
# 例子中索引模版删除如下
DELETE /_index_template/log_template
2.4.6、校验索引模版是否存在
# 存在返回200,不存在返回404
HEAD /_index_template/log_template
2.4.7、 查看索引模版
GET /_template/<index-template>
GET /_template/log_template
3、总结
通过上面的学习,我们可以熟练的进行索引模版的创建,组件模版的创建以及模版优先级,数据流模版,组件模版优先级等,大大的满足了日常工作中的需要,如果还想了解更多参数的细节问题可以查阅官网。公众号《醉鱼Java》后续也会推出更底层的源码分析等内容,感兴趣的道友可以关注一波一起成长
对于java代码创建索引模版可以参考下面文章
Elasticsearch 创建索引和索引模版
猜你喜欢
- 2024-10-29 你还在用 Date?快使用 LocalDateTime 了!
- 2024-10-29 Java修炼终极指南:79,80,81 签到终极修炼天赋
- 2024-10-29 硬核!最全的延迟任务实现方式汇总!附代码(强烈推荐)
- 2024-10-29 还在实体类中用Date?JDK8新的日期类型不香么?
- 2024-10-29 LocalDateTime 说:2020,是时候换个更好的日期时间类了
- 2024-10-29 程序员,你还在使用Date嘛?建议你使用LocalDateTime哦
- 2024-10-29 深度思考:在JDK8中,日期类型该如何使用?
- 2024-10-29 为什么建议使用你 LocalDateTime,而不是 Date?
- 2024-10-29 百度开源的分布式唯一ID生成器UidGenerator,解决了时钟回拨问题
- 2024-10-29 DeepLearning4j 实战:手写体数字识别的 GPU 实现与性能对比
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- oraclesql优化 (66)
- 类的加载机制 (75)
- feignclient (62)
- 一致性hash算法 (71)
- dockfile (66)
- 锁机制 (57)
- javaresponse (60)
- 查看hive版本 (59)
- phpworkerman (57)
- spark算子 (58)
- vue双向绑定的原理 (68)
- springbootget请求 (58)
- docker网络三种模式 (67)
- spring控制反转 (71)
- data:image/jpeg (69)
- base64 (69)
- java分页 (64)
- kibanadocker (60)
- qabstracttablemodel (62)
- java生成pdf文件 (69)
- deletelater (62)
- com.aspose.words (58)
- android.mk (62)
- qopengl (73)
- epoch_millis (61)
本文暂时没有评论,来添加一个吧(●'◡'●)