Elasticsearch 参考指南(索引模板)

异步潮涌
• 阅读 5156

索引模板

索引模板允许你定义在创建新索引时自动应用的模板,模板包括设置和映射,以及一个简单的模式模板,该模板控制是否应该将模板应用于新索引。

模板只在创建索引时应用,更改模板不会对现有索引产生影响,当使用创建索引API时,作为创建索引调用的一部分定义的设置/映射将优先于模板中定义的任何匹配设置/映射。

例如:

PUT _template/template_1
{
  "index_patterns": ["te*", "bar*"],
  "settings": {
    "number_of_shards": 1
  },
  "mappings": {
    "_source": {
      "enabled": false
    },
    "properties": {
      "host_name": {
        "type": "keyword"
      },
      "created_at": {
        "type": "date",
        "format": "EEE MMM dd HH:mm:ss Z yyyy"
      }
    }
  }
}
索引模板提供c样式/* */块注释,在JSON文档中,除了初始左大括号之前,其他地方都允许使用注释。

定义一个名为template_1的模板,模板模式为te*bar*,设置和映射将应用于任何匹配te*bar*模式的索引名称。

也可以在索引模板中包含以下别名:

PUT _template/template_1
{
    "index_patterns" : ["te*"],
    "settings" : {
        "number_of_shards" : 1
    },
    "aliases" : {
        "alias1" : {},
        "alias2" : {
            "filter" : {
                "term" : {"user" : "kimchy" }
            },
            "routing" : "kimchy"
        },
        "{index}-alias" : {} 
    }
}
别名中的{index}占位符将被替换为模板在创建索引期间应用到的实际索引名。

删除一个模板

索引模板由一个名称标识(在上面的例子中是template_1),也可以删除:

DELETE /_template/template_1

获取模版

索引模板由一个名称标识(在上面的例子中是template_1),可以使用以下方法检索:

GET /_template/template_1

还可以使用通配符匹配多个模板,如:

GET /_template/temp*
GET /_template/template_1,template_2

获取可运行的所有索引模板的列表:

GET /_template

模板存在

用于检查模板是否存在,例如:

HEAD _template/template_1

HTTP状态码指示具有给定名称的模板是否存在,状态码200表示存在,404表示不存在。

在7.0.0之前,映射定义用于包含类型名称,虽然默认情况下映射不再包含类型名称,但是仍然可以通过设置参数include_type_name使用旧格式。

多模板匹配

多个索引模板可能匹配一个索引,在本例中,设置和映射都合并到索引的最终配置中,可以使用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 }
    }
}

上面的操作将禁用存储_source,但是对于以te*开头的索引,仍然启用_source,注意,对于映射,合并是“深度”的,这意味着基于对象/属性的映射可以很容易地在高阶模板上添加/覆盖,而低阶模板提供了基础。

具有相同顺序值的多个匹配模板将导致不确定的合并顺序。

模板版本控制

为了简化外部系统对模板的管理,模板可以选择添加一个version号,版本号可以是任何整数,version字段是完全可选的,仅用于模板的外部管理,要取消version设置,只需替换模板而不用指定另一个。

PUT /_template/template_1
{
    "index_patterns" : ["*"],
    "order" : 0,
    "settings" : {
        "number_of_shards" : 1
    },
    "version": 123
}

要检查版本,可以使用filter_path过滤响应,将响应限制为只有version

GET /_template/template_1?filter_path=*.version

这应该会给出一个小的响应,使解析既简单又便宜:

{
  "template_1" : {
    "version" : 123
  }
}

点赞
收藏
评论区
推荐文章
Wesley13 Wesley13
3年前
SQL进阶
一、索引设置1、索引的设置原则经常出现在WHERE条件、关联条件中的字段作为索引字段;在满足查询需求的前提下,应尽可能少的创建索引;(对于一个组合索引,可以满足以组合索引左边的一部分字段的查询需求);经常更新的字段,不适合创建索引;区分度太低的字段,不适合创建索引;
Stella981 Stella981
3年前
Elasticsearch 索引模板
概述记录自己在工作中将生产的数据按月保存在ES中(通过logstash采集kafka数据到ES),由于生产环境数据量比较庞大(一天的日志量大概在2500万条左右),为了后期减轻服务器压力,方便我们维护,所以需要对我们的日志进行处理,按月建立不同的ES索引库,能够查询最近6个月的日志,关闭前6个月不用的日志。创建模板如果用户每次新建
Stella981 Stella981
3年前
Elasticsearch Index Templates(索引模板)
索引模板,故名思议,就是创建索引的模板,模板中包含公共的配置(settings)和映射(Mapping),并包含一个简单触发条件,及条件满足时使用该模板创建一个新的索引。注意:模板只在创建索引时应用。更改模板不会对现有索引产生影响。当使用createindexAPI时,作为createindex调用的一部分定义的设置/映射将优先于模板中定义的任
Stella981 Stella981
3年前
Elasticsearch Index Aliases详解
微信公众号:\中间件兴趣圈\作者简介:《RocketMQ技术内幕》作者;indexaliases,索引别名,有点类似名称映射,一个索引别名可以映射多个真实索引,索引别名在定义时还支持filter,构成同一个索引,不同的视图。思考:一个索引别名可以映射成多个索引,那如果向一个别名添加一个文档时,会在该别名下对应的所有索引下都
Stella981 Stella981
3年前
Elasticsearch Mapping parameters(主要参数一览)
Elasticsearch在创建类型映射时可以指定映射参数,下面将一一进行介绍。analyzer指定分词器。elasticsearch是一款支持全文检索的分布式存储系统,对于text类型的字段,首先会使用分词器进行分词,然后将分词后的词根一个一个存储在倒排索引中,后续查询主要是针对词根的搜索。analyzer该参数可以在查询、字段、索引级
Stella981 Stella981
3年前
Django框架详解之template
模板简介  将页面的设计和python的代码分离开会更干净简洁更容易维护。我们可以使用Django的模板系统来实现这种模式  python的模板:HTML代码模板语法  模板包括在使用时会被值替换掉的变量,和控制模板逻辑的标签变量  在Django模板中遍历复杂数据结构的关键是句点字符{语法}{{
Stella981 Stella981
3年前
Elasticsearch Dynamic Mapping(动态映射机制)
Elasticsearch可以根据待索引数据自动建立索引、自动定义映射类型。1PUT data/_doc/1 2{ "count": 5 }执行上述请求时,索引"data"不必预先创建,该API首先会自动创建索引data、类型映射\_doc,其映射类型下包含字段count,其类型为long。自动根据文档的值推测其类型的过程,就是本文要重点描述
Stella981 Stella981
3年前
ES中删除索引的mapping字段时应该考虑的点
1.创建新索引2.新索引创建新mapping3.原索引导出数据到新索引4.新索引创建原索引一致的别名5.删除原索引针对于第四步:这个就要用到索引别名了,如果你最开始建索引的时候没有考虑设计索引别名,那就杯具了。你可以把索引的名称设置成name\_v1 别名设置为name,然后代码里面访问搜索的时候连接的其实是别名na
Wesley13 Wesley13
3年前
mongo复合索引
1、复合索引创建语法    db.collection.createIndex({<field1:<type,<field2:<type2,...})    同创建单键(列)索引一样,索引创建时需要指定每一个键索引的顺序    多个键直接用逗号分隔    索引创建语法可以参考:h
浅析MySQL代价模型:告别盲目使用EXPLAIN,提前预知索引优化策略 | 京东云技术团队
背景在MySQL中,当我们为表创建了一个或多个索引后,通常需要在索引定义完成后,根据具体的数据情况执行EXPLAIN命令,才能观察到数据库实际使用哪个索引、是否使用索引。这使得我们在添加新索引之前,无法提前预知数据库是否能使用期望的索引。更为糟糕的是,有时
浅析MySQL代价模型:告别盲目使用EXPLAIN,提前预知索引优化策略| 京东零售技术团队
背景在MySQL中,当我们为表创建了一个或多个索引后,通常需要在索引定义完成后,根据具体的数据情况执行EXPLAIN命令,才能观察到数据库实际使用哪个索引、是否使用索引。这使得我们在添加新索引之前,无法提前预知数据库是否能使用期望的索引。更为糟糕的是,有时