乐趣区

关于后端:1024特别篇快速上手ES索引模版

ES(8.1)认证工程师考题纲要参考如下

https://mp.weixin.qq.com/s/x7lMmMAo2563JysMJ8vgRQ

1、题目

明天咱们探讨的是《索引模板的创立与应用》

大体思路如下:分两局部解决、第一局部是先创立索引模板、第二局部应用索引模板。在创立索引模板之前咱们先了解一下什么事索引模板、而后咱们带着以下几个问题进行浏览本文

  • 什么是索引模版
  • 索引模版有什么用,应用场景有哪些
  • 索引模版如何创立
  • 如何应用索引模版

2、解答

2.1、什么是索引模版

索引模版是创立索引时主动利用提前设置好的 settingsmappingsaliases,通过索引的名称进行匹配

对索引模版的更改时不会影响目前曾经依据索引模版创立的索引

2.2、索引模版有什么用,应用场景有哪些

应用索引模版能够省去创立索引时再次指定 settingsmappingsaliases 的步骤,具体的利用场景比拟罕用的就有日志索引。

需要如下:查问日志索引名称为 log,每天依据当天日期生成索引(log-20221022),所有的索引应用雷同的settingsmappings,且 alias 指向最新日期的 log 索引 那么咱们就能够应用 索引模版 来实现,索引模版如何创立呢,其实很简略,与一般的创立索引差异不大,具体如下

2.3、索引模版创立

创立索引须要参数,那么创立索引模版也有参数管制,能够应用的参数如下

  • index_patterns: 必须的参数,应用通配符定义匹配索引的规定
  • priority:可选的参数,索引模版的匹配优先级,如果不填默认0(最低优先级),多个模版时,优先匹配优先级高的模版
  • template:可选参数,然而我认为是必须的,少了这个参数,索引模版的意义在哪呢是不是,能够说是外围参数。能够配置索引的settingsmappingsaliases

    • settings

      索引的 settings 设置,可参考上一篇文章中 settings 的局部

    • mappings

      索引的 mappings 设置,可参考上一篇文章中 mappings 的局部

    • aliases

      对象模式,key是别名的 名称,并且还反对如下参数

      • filter

        可选,对象类型,限度别名能拜访的文档

      • index_routing

        可选,字符串,索引操作时的路由值,如果指定会笼罩 routing 的值

      • is_hidden

        可选,布尔类型,如果设置为 true,暗藏别名。默认false,该别名指定的所有索引必须有雷同的is_hidden

      • is_write_index

        可选,布尔类型,如果设置为true,该索引为别名的写索引

      • routing

        可选,字符串,索引和搜寻操作时的路由值

      • search_routing

        可选,字符串,搜寻操作时的路由值,如果指定会笼罩 routing 的值

  • 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 模版设置 createtimedate类型,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,具体数据流的应用可关注公众号,获取后续文章的最新更新

    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 后续也会推出更底层的源码剖析等内容,感兴趣的道友能够关注一波一起成长

本文由 mdnice 多平台公布

退出移动版