当前位置:   article > 正文

elasticsearch中创建索引模板_index_template_elasticsearch 创建索引模板

elasticsearch 创建索引模板

1、什么是索引模板

        索引模版是创建索引时自动应用提前设置好的settings、mappings和aliases,通过索引的名称进行匹配。
        对索引模版的更改时不会影响目前已经根据索引模版创建的索引。

2、索引模板作用及使用场景

        使用索引模版可以省去创建索引时再次指定settings、mappings、aliases的步骤,具体的应用场景比较常用的就有日志索引。

        需求如下:查询日志索引名称为log,每天根据当天日期生成索引(log-20232302),所有的索引使用相同的settings和mappings,且alias指向最新日期的log索引那么我们就可以使用索引模版来实现。

3、创建索引模板

        创建模板索引的参数及模板控制参数如下;

  • index_patterns: 必须的参数,使用通配符定义匹配索引的规则。
  • priority:可选的参数,索引模版的匹配优先级,如果不填默认0(最低优先级),多个模版时,优先匹配优先级高的模版。
  • template:可选参数,但是我认为是必须的,少了这个参数,索引模版的意义在哪呢是不是,可以说是核心参数。可以配置索引的settings,mappings,aliases。

        settings:索引的settings设置。

        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:可选,对象类型,该索引模版的用户元数据配置
     

创建一个简单的索引模板:

  1. PUT _index_template/log_template
  2. {
  3. "index_patterns": "log*",
  4. "priority": "1",
  5. "template": {
  6. "settings": {
  7. "number_of_shards": "2",
  8. "number_of_replicas": "1"
  9. },
  10. "mappings": {
  11. "properties": {
  12. "creater": {
  13. "type": "keyword"
  14. },
  15. "module": {
  16. "type": "keyword"
  17. },
  18. "content": {
  19. "type": "text",
  20. "fields": {
  21. "keyword": {
  22. "type": "keyword"
  23. }
  24. }
  25. },
  26. "time": {
  27. "type": "date",
  28. "format": "strict_date_optional_time||epoch_millis||yyyy-MM-dd HH:mm:ss"
  29. }
  30. }
  31. },
  32. "aliases": {
  33. "log": {}
  34. }
  35. }
  36. }

4、查看索引模板

  1. GET _index_template/log_template
  2. # 响应结果
  3. {
  4. "index_templates" : [
  5. {
  6. "name" : "log_template",
  7. "index_template" : {
  8. "index_patterns" : [
  9. "log*"
  10. ],
  11. "template" : {
  12. "settings" : {
  13. "index" : {
  14. "number_of_shards" : "2",
  15. "number_of_replicas" : "1"
  16. }
  17. },
  18. "mappings" : {
  19. "properties" : {
  20. "module" : {
  21. "type" : "keyword"
  22. },
  23. "creater" : {
  24. "type" : "keyword"
  25. },
  26. "time" : {
  27. "format" : "strict_date_optional_time||epoch_millis||yyyy-MM-dd HH:mm:ss",
  28. "type" : "date"
  29. },
  30. "content" : {
  31. "type" : "text",
  32. "fields" : {
  33. "keyword" : {
  34. "type" : "keyword"
  35. }
  36. }
  37. }
  38. }
  39. },
  40. "aliases" : {
  41. "log" : { }
  42. }
  43. },
  44. "composed_of" : [ ],
  45. "priority" : 1
  46. }
  47. }
  48. ]
  49. }

5、校验索引模板是否存在

        存在返回200,不存在返回404。

6、使用索引模板

6.1 通过索引模板创建索引

以上面创建的索引模板log*为例,索引名称以log开头的索引都会自动使用索引模板创建。

创建索引log-2023-03-04:

PUT log-2023-03-04

查看索引log-2023-03-04:

  1. GET log-2023-03-04
  2. # 响应结果
  3. {
  4. "log-2023-03-04" : {
  5. "aliases" : {
  6. "log" : { }
  7. },
  8. "mappings" : {
  9. "properties" : {
  10. "content" : {
  11. "type" : "text",
  12. "fields" : {
  13. "keyword" : {
  14. "type" : "keyword"
  15. }
  16. }
  17. },
  18. "creater" : {
  19. "type" : "keyword"
  20. },
  21. "module" : {
  22. "type" : "keyword"
  23. },
  24. "time" : {
  25. "type" : "date",
  26. "format" : "strict_date_optional_time||epoch_millis||yyyy-MM-dd HH:mm:ss"
  27. }
  28. }
  29. },
  30. "settings" : {
  31. "index" : {
  32. "routing" : {
  33. "allocation" : {
  34. "include" : {
  35. "_tier_preference" : "data_content"
  36. }
  37. }
  38. },
  39. "number_of_shards" : "2",
  40. "provided_name" : "log-2023-03-04",
  41. "creation_date" : "1684712008494",
  42. "number_of_replicas" : "1",
  43. "uuid" : "PLGea-euRF6RqFO8d4xstA",
  44. "version" : {
  45. "created" : "7170699"
  46. }
  47. }
  48. }
  49. }
  50. }

6.2 同时匹配多个索引模板的选择

        在实际使用中,我们会创建多个索引模板,这个时候该如何选择呢?

        首先再创建一个索引模版log_template2,匹配模式设置'log-2023*',优先级设置2,该模版time字段设置为keyword,上面log_template模版设置time为date类型。

  1. PUT _index_template/log_template2
  2. {
  3. "index_patterns": "log-2023*",
  4. "priority": "2",
  5. "template": {
  6. "settings": {
  7. "number_of_shards": "2",
  8. "number_of_replicas": "1"
  9. },
  10. "mappings": {
  11. "properties": {
  12. "creater": {
  13. "type": "keyword"
  14. },
  15. "module": {
  16. "type": "keyword"
  17. },
  18. "content": {
  19. "type": "text",
  20. "fields": {
  21. "keyword": {
  22. "type": "keyword"
  23. }
  24. }
  25. },
  26. "time": {
  27. "type": "keyword"
  28. }
  29. }
  30. },
  31. "aliases": {
  32. "log-2023": {}
  33. }
  34. }
  35. }

创建索引log-2023-03-04-v2:

查看索引log-2023-03-04-v2:

        可以看出索引og-2023-03-04-v2使用了log_template2模板,log_template2优先级设置为2高于log_template的优先级。索引匹配到多个模版时优先使用优先级高的模版。

6.3 使用索引模板创建索引别名

        在上面使用的两个索引模板中,创建索引时都自动添加了别名,别名操作语句如下:

添加别名:

方法一:

  1. POST _aliases
  2. {
  3. "actions": [
  4. {
  5. "add": {
  6. "index": "log-*",
  7. "alias": "logs"
  8. }
  9. }
  10. ]
  11. }

方法二:

删除别名:

  1. POST _aliases
  2. {
  3. "actions": [
  4. {
  5. "remove": {
  6. "index": "log-2023-03-04-v2",
  7. "alias": "log-2023"
  8. }
  9. }
  10. ]
  11. }

批量删除别名:

  1. POST _aliases
  2. {
  3. "actions": [
  4. {
  5. "remove": {
  6. "index": "log-2023*",
  7. "alias": "logs"
  8. }
  9. }
  10. ]
  11. }

7、删除索引模板

DELETE _index_template/log_template

本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号