Su的技术博客

  • 首页
  • 原创
  • 视频
  • Java
  • MySQL
  • DDD
  • 事故复盘
  • 架构方案
  • AI
  • Other
  • 工具
    • AI工具集
    • 工具清单
    • JSON在线格式化
    • JSON在线比较
    • SQL在线格式化
  • 打赏
  • 关于
路很长,又很短
  1. 首页
  2. ElasticSearch
  3. 正文
                           

【搜索引擎】干货 | Elasticsearch基础但非常有用的功能之二:模板

2025-04-02 268点热度 0人点赞 0条评论

1、 引言

业务场景1:数据量非常大,需要进行索引生命周期管理,按日期划分索引,要求多个索引的Mapping一致,每次手动创建或者脚本创建都很麻烦! 怎么破?
业务场景2:实际业务多个索引,想让多个索引中的相同名字的字段类型完全一致,以便实现跨索引检索。怎么破?

干货 | Elasticsearch基础但非常有用的功能之二:模板

思考上面两个问题,当单Mapping不能解决多索引问题时,模板的作用就体现出来了。
下文中:模板=template,映射=Mapping。

2、Elasticsearch模板是什么鬼?

【维基百科】模板:或称样板、范本,通常指具有固定内容、可构建多个不同实例的可重用样板。
Elasticsearch索引template指:在创建新索引时将自动套用的模板。
直接上样例,一探究竟。
1 PUT _template/template_1
2{
3  "index_patterns": ["te*", "bar*"],
4 "aliases" : {
5        "alias1" : {}}
6  "settings": {
7    "number_of_shards": 1
8  },
9  "mappings": {
10    "_source": {
11      "enabled": false
12    },
13    "properties": {
14      "host_name": {
15        "type": "keyword"
16      },
17      "created_at": {
18        "type": "date",
19        "format": "EEE MMM dd HH:mm:ss Z yyyy"
20      }
21    }
22  }
23}

其中:
index_patterns代表匹配的索引。
settings 指索引层面的设置。
可以设置索引层面的配置,包括:
  1. 分片数(number_of_shards)、
  2. 副本数(number_of_replicas)、
  3. 刷新频率(refresh_interval)

…..

mappings:字段映射。
aliases:指定索引的别名。
别名的妙处参考:Elasticsearch基础但非常有用的功能之一:别名

3、Elasticsearch模板的基础操作

3.1 增

1PUT _template/template_1
2...

如第二节的示例。

3.2 删

1DELETE /_template/template_1

3.3 改

直接执行3.1的创建模板操作,会生成相同名称的新的模板,并会覆盖掉原来创建的模板。
新模板只对新创建的索引生效,对历史索引不起作用。

3.4 查

1GET /_template/template_1

4、Elasticsearch模板进阶实战

当template和Mapping的dynamic_templates结合就相当于放了大招。
直接拿个实战例子说明问题。
需求1:默认如果不显示指定Mapping,数值类型的值会被映射会long类型,但实际业务数值都比较小,会有存储浪费。需要将默认值改成integer。
需求2:date_*开头的字符统一匹配为date日期类型。
实战如下:
1PUT sampleindex/_doc/1
2{
3  "Value":123
4}
5
6GET sampleindex/_mapping
7
8
9PUT _template/sample_dynamic_template
10{
11  "index_patterns": [
12    "sample*"
13  ],
14  "mappings": {
15    "dynamic_templates": [
16      {
17        "handle_integers": {
18          "match_mapping_type": "long",
19          "mapping": {
20            "type": "integer"
21          }
22        }
23      },
24      {
25        "handle_date": {
26          "match": "date_*",
27          "unmatch": "*_text",
28          "mapping": {
29            "type": "date"
30          }
31        }
32      }
33    ]
34  }
35}
36
37DELETE sampleindex
38PUT sampleindex/_doc/1
39{
40  "Value":123,
41  "date_curtime":"1574494620000"
42}
43
44GET sampleindex/_mapping

  • index_patterns:对应待匹配的以”sample开头的“索引。
  • handle_integers:动态模板的名字,你可以自己定义。
  • match_mapping_type:被匹配的被重写的源数据类型。
  • match/unmatch:匹配字段类型。
整个操作的核心是:将默认的long改成integer,date_*开头匹配为date类型。
更多分类如下:
干货 | Elasticsearch基础但非常有用的功能之二:模板
核心参见:
https://www.elastic.co/guide/en/elasticsearch/reference/current/dynamic-templates.html
不再赘述。

5、常见问题

问题1:template和Mapping到底什么区别?

  • Mapping:
    针对单一索引。
    类似Mysql中的表结构定义,是所有数据存储到该索引的架构定义。
    字段支持:1)静态明确定义、2)系统层面自动识别、3)动态匹配。
  • template:
    针对一个或多个索引。
    除了定义Mapping的全支持外,还可以指定Setting、别名等。
    适合数据量大、灵活多变的业务场景。

问题2:模板里可以指定Mapping,那我们还需要Mapping做什么?

  • 索引模板对于在多个索引创建映射时非常有用。
  • 如果数据量少,业务场景单一,那只Mapping也能解决问题。

问题3:如果我想更新Mapping,更新模板可以吗?

认知前提:Mapping一旦创建了,不能修改。除非进行reindex操作。
  • 一旦创建了索引,对索引模板的更新将不会影响该索引。更新模板仅适用于新索引。
  • 同样,更新为dynamic_templates仅会影响索引中的新字段。

问题4:模板order起到什么作用?

拿星球同学实战例子举例一下:
问题:我现在想创建2个template,其中模板B-template有副本设置,另外一个A-template没有副本设置,我可以这样配置吗?
  • 其中B-template匹配到我单独设置的几个索引("logstash-B-tomcat-","logstash-B1-tomcat-","logstash-B2-server-*","logstash-B3-tomcat"),
  • 另外A-template匹配所有,我设置B-template的order比A-template高,是不是我那4个索引就会匹配到B-template呢?
正确写法参考:
1PUT _template/b-template
2{
3  "order":1,
4  "index_patterns":["logstash-b-tomcat-*","logstash-b1-tomcat-*","logstash-b2-server-*","logstash-b3-tomcat-*"],
5  "settings":{
6    "number_of_shards":"5",
7    "number_of_replicas":"1",
8    "refresh_interval":"30s",
9    "translog.durability":"async"
10  }
11}
12
13PUT logstash-b-tomcat-1
14
15PUT _template/a-template
16{

17  "order":0,
18  "index_patterns":["*"],
19  "settings":{
20    "number_of_shards":"5",
21    "number_of_replicas":"0",
22    "refresh_interval":"30s",
23    "translog.durability":"async"
24  }
25}

核心原理:order高会覆盖order低的模板。

6、小结

实战中,你会发现:template是高效的的工具,可全局设置多个索引且批量生效,避免的不必要的返工。
相比之下Mapping和别名优势如下:
  • Mapping有助于我们保持数据库结构的一致性,并为我们提供Elasticsearch丰富的数据类型以及更复杂的自定义Mapping和分析类型。
  • 别名Alias对于最大限度地无需停服完成索引切换起到重要作用。
因此,当我们新系统准备选型Elasticsearch作为核心数据存储时,优先注意数据建模;数据建模的过程中要整合template、alias和mapping的综合优势,才能保证模型的健壮性。

本文仅供学习!所有权归属原作者。侵删!文章来源: 铭毅天下Elasticsearch

更多文章:

  1. Elasticsearch 字段膨胀不要怕,Flattened 类型解千愁!
  2. 一次磁盘占用率 100% 的排查记录
  3. Elasticsearch 使用误区之五——单次请求获取大量数据
  4. IntelliJ IDEA 2022.2 正式发布,功能真心强大!
  5. Elasticsearch基础但非常有用的功能之一:别名
  6. Elasticsearch 使用误区之三——分片设置不合理
  7. 系统设计 | 对象转换方案
  8. Elasticsearch 使用误区之二——频繁更新文档
  9. 6种限流实现,附代码![通俗易懂]
  10. 万字长文全面了解学习Netty!
标签: 搜索引擎 ElasticSearch ES 模板
最后更新:2025-04-02

coder

分享干货文章,学习先进经验。

打赏 点赞
< 上一篇
下一篇 >
广告
文章目录
  • 1、 引言
  • 2、Elasticsearch模板是什么鬼?
  • 3、Elasticsearch模板的基础操作
  • 4、Elasticsearch模板进阶实战
  • 5、常见问题
  • 问题1:template和Mapping到底什么区别?
  • 问题2:模板里可以指定Mapping,那我们还需要Mapping做什么?
  • 问题3:如果我想更新Mapping,更新模板可以吗?
  • 问题4:模板order起到什么作用?
    • 6、小结
最新 热点 推荐
最新 热点 推荐
视频笔记-微服务架构P4:必懂5种设计模式 视频笔记:微服务架构P4 设计模式:每服务数据库、API 网关和事件驱动架构 干货 | 论Elasticsearch数据建模的重要性 马蜂窝消息总线——面向业务的消息服务设计 基于 MySQL Binlog 实现可配置的异构数据同步 视频笔记:Google发布Agent2Agent协议 视频笔记:什么是微服务,为什么是微服务? 视频笔记:什么是AI 智能体?
基于 MySQL Binlog 实现可配置的异构数据同步马蜂窝消息总线——面向业务的消息服务设计视频笔记:微服务架构P4 设计模式:每服务数据库、API 网关和事件驱动架构干货 | 论Elasticsearch数据建模的重要性视频笔记-微服务架构P4:必懂5种设计模式视频笔记:什么是微服务,为什么是微服务?视频笔记:Google发布Agent2Agent协议
JVM垃圾回收器CMS原理与调优 2021.07.13 我们是这样崩的 猪八戒网DevOps之Java组件安全检测 系统设计 | “胖瘦” BFF:常见的两种微服务形态 6种限流实现,附代码![通俗易懂] JVM和机器规格调优在有赞的实践 ChatGLM:ChatGPT的替代方案 JVM GC配置指南

CRUD (1) Event Sourcing (1) graphql (1) id (1) NoSQL (1) quarkus (1) rest (1) RocketMQ (2) Spring Boot (1) zk (1) zookeeper (1) 上下文 (1) 事务消息 (1) 二级缓存 (1) 值对象 (1) 关系数据库 (1) 分布式缓存 (1) 原子性 (1) 唯一ID (1) 商品 (1) 多对多 (1) 子域 (1) 字符集 (1) 客户端心跳 (1) 幂等 (2) 干货 (1) 并发 (1) 应用场景 (1) 应用架构图 (1) 康威定律 (2) 异步复制 (1) 微服务架构 (3) 总体方案 (1) 技术方案 (2) 技术架构 (2) 技术架构图 (1) 技能 (1) 持续集成 (1) 支撑域 (1) 故障恢复 (1) 数据架构图 (1) 方案选型 (1) 日记 (1) 服务发现 (1) 服务治理 (1) 服务注册 (2) 机房 (1) 核心域 (1) 泄漏 (1) 洋葱架构 (1) 消息队列 (5) 源码剖析 (1) 灰度发布 (1) 熔断 (1) 生态 (1) 画图工具 (1) 研发团队 (1) 线程 (2) 组织架构 (1) 缓存架构 (1) 编码 (1) 视频 (20) 读写分离 (1) 贵州 (1) 软件设计 (1) 迁移 (1) 通用域 (1) 集群化 (1) 雪花算法 (1) 顺序消息 (1)

推荐链接🔗
  • AI工具集
  • 工具箱🛠️

COPYRIGHT © 2014-2025 verysu.com . ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang

粤ICP备15033072号-2

x