原文:Elasticsearch7.X 入门学习第八课笔记-----索引模板和动态模板

版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。

本章,我们将简单介绍索引模板和动态模板的内容。其实,在前面章节,我们已经粗略地用到了动态模板,但是没有明确提出这样的概念。

索引模板Index Template

索引模板,英文名为Index Template。它是一种机制,这种机制允许我们定义一种模板,这种模板当新索引创建时将被自动应用。模板包含settingsmapping,以及这个模板是否可被应用于新的索引。

索引模板有以下限制:

  1. 索引模板仅在一个索引新创建时才起作用,修改模板不会影响已创建的索引。
  2. 可以设定多个索引模板,这些索引模板的设置将被merge在一起。
  3. 可以通过对索引模板指定order的数值,来控制merge的过程。

模板定义可以如下:


  1. {
  2. "order": 0, // 模板优先级
  3. "template": "sample_info*", // 模板匹配的名称方式
  4. "settings": {...}, // 索引设置
  5. "mappings": {...}, // 索引中各字段的映射定义
  6. "aliases": {...} // 索引的别名
  7. }

接下来,我们创建两个模板。

接下来,我们创建两个模板。


  1. # 创建一个默认模板,模板名为 template_default
  2. # 这个模板匹配所有的索引,它的order属性值为0。索引创建时将被设置一个分片,一个副本。
  3. PUT _template/template_default
  4. {
  5. "index_patterns": ["*"],
  6. "order" : 0,
  7. "version": 1,
  8. "settings": {
  9. "number_of_shards": 1,
  10. "number_of_replicas":1
  11. }
  12. }
  13. # 创建一个模板,模板名为 template_test
  14. # 这个模板匹配test开头的索引,它的order属性值为1。索引创建时将被设置一个分片,两个副本。
  15. # 并且,date类型自动检测功能将关闭,数字自动检测功能将开启。
  16. PUT /_template/template_test
  17. {
  18. "index_patterns" : ["test*"],
  19. "order" : 1,
  20. "settings" : {
  21. "number_of_shards": 1,
  22. "number_of_replicas" : 2
  23. },
  24. "mappings" : {
  25. "date_detection": false,
  26. "numeric_detection": true
  27. }
  28. }
  29. # 删除模板名为template_1的模板
  30. DELETE /_template/template_1
  31. # 获取模板名为template_1的模板
  32. GET /_template/template_1
  33. # 获取通配符模板
  34. GET /_template/temp*
  35. # 获取多个模板
  36. GET /_template/template_1,template_2
  37. # 获取所有模板
  38. GET /_template
  39. # 判断模板是否存在
  40. HEAD _template/template_1

1、模板优先级

有时候,一个模板可能绝大部分符合新建索引的需求,但是局部需要微调,此时,如果复制旧的模板,修改该模板后,成为一个新的索引模板即可达到我们的需求,但是这操作略显重复。此时,可以采用模板叠加与覆盖来操作。模板的优先级是通过模板中的 order 字段定义的,数字越大,优先级越高。

  1. 应用Elasticsearch默认的settingsmappings
  2. 应用 order 数值低的索引模板中的设置。
  3. 应用 order 数值高的索引模板中的设置
  4. 应用索引创建时,用户指定的settingsmappings

2、索引模板的匹配

索引模板中的 index_patterns字段定义的是该索引模板所应用的索引情况。如 "index_patterns" : ["test*"] 所表示的含义是,当新建索引时,所有以 tete 开头的索引都会自动匹配到该索引模板。利用该模板进行相应的设置和字段添加等。

3、setting 部分

索引模板中的 setting 部分一般定义的是索引的主分片、拷贝分片、刷新时间、自定义分析器等。常见的 setting 部分结构如下:


  1. "settings": {
  2. "index": {
  3. "analysis": {...}, // 自定义的分析器
  4. "number_of_shards": "32", // 主分片的个数
  5. "number_of_replicas": "1", // 主分片的拷贝分片个数
  6. "refresh_interval": "5s" // 刷新时间
  7. }
  8. }

建立的索引,不会立马查到,这是为什么 Elasticsearch 为 near-real-time(接近实时)的原因,需要配置刷新时间,默认的是 1s。setting 的设置中,重点是自定义分析器的设置。

分析器是三个顺序执行的组件的结合。他们分别是字符过滤器、分词器、标记过滤器。

动态模板

动态模板,英文名为Dynamic Templates,是根据Elasticsearch可识别的数据类型,结合字段名称,来动态设定字段类型的一种机制。

而Elasticsearch自带了动态字段映射,它的规则如下所示。

动态字段映射

通过动态模板这种机制,我们可以达到类似下面的效果:

  1. 所有的字符串类型都设定成 keyword,或者关闭keyword字段。
  2. is开头的字段都设置成boolean类型。
  3. long_开头的字段都设置成long类型。

它的语法如下所示:

动态模板的语法

这种语法包含以下内容:

  1. 动态模板是定义在某个具体索引的mappings中
  2. 动态模板需要指定一个名称,例如上图的my_template_name
  3. 匹配规则是一个数组
  4. 为匹配到的字段设置mapping

1. 例子1


  1. DELETE my_index
  2. # 简单的例子
  3. PUT my_index
  4. {
  5. "mappings": {
  6. "dynamic_templates": [
  7. {
  8. "strings_as_boolean": {
  9. "match_mapping_type": "string",
  10. "match":"is*",
  11. "mapping": {
  12. "type": "boolean"
  13. }
  14. }
  15. },
  16. {
  17. "strings_as_keywords": {
  18. "match_mapping_type": "string",
  19. "mapping": {
  20. "type": "keyword"
  21. }
  22. }
  23. }
  24. ]
  25. }
  26. }
  27. PUT my_index/_doc/1
  28. {
  29. "firstName":"Ruan",
  30. "isVIP":"true"
  31. }
  32. GET my_index/_mapping

在这个例子中,我们设置了两个动态模板。

  1. 根据strings_as_boolean的动态模板定义,如果字段类型为字符串类型,且字段名以is开头,其字段类型将映射成boolean类型。
  2. 根据strings_as_keywords的动态模板定义,如果字段类型为字符串类型,其字段类型将映射成keyword类型。

2. 例子2


  1. DELETE my_index
  2. # 路径的例子
  3. PUT my_index
  4. {
  5. "mappings": {
  6. "dynamic_templates": [
  7. {
  8. "full_name": {
  9. "path_match": "name.*",
  10. "path_unmatch": "*.middle",
  11. "mapping": {
  12. "type": "text",
  13. "copy_to": "full_name"
  14. }
  15. }
  16. }
  17. ]
  18. }
  19. }
  20. PUT my_index/_doc/1
  21. {
  22. "name": {
  23. "first": "John",
  24. "middle": "Winston",
  25. "last": "Lennon"
  26. }
  27. }
  28. GET my_index/_search?q=full_name:John

在这个例子中,我们定义了一个动态模板,名字叫full_name。它会匹配路径,路径以name开头,且不以middle结尾的字段,将被映射成一个text,且拷贝到full_name这个字段中。

总结

我们了解了索引模板和动态模板各自的作用,也举了一些实际的例子来加深我们的印象。但是,更全面的内容还需要看Elasticsearch的官网。

Elasticsearch7.X 入门学习第八课笔记-----索引模板和动态模板的更多相关文章

  1. Elasticsearch7.X 入门学习第七课笔记-----Mapping多字段与自定义Analyzer

    原文:Elasticsearch7.X 入门学习第七课笔记-----Mapping多字段与自定义Analyzer 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处 ...

  2. Elasticsearch7.X 入门学习第五课笔记---- - Mapping设定介绍

    原文:Elasticsearch7.X 入门学习第五课笔记---- - Mapping设定介绍 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本 ...

  3. Elasticsearch7.X 入门学习第四课笔记---- Search API之(Request Body Search 和DSL简介)

    原文:Elasticsearch7.X 入门学习第四课笔记---- Search API之(Request Body Search 和DSL简介) 版权声明:本文为博主原创文章,遵循CC 4.0 BY ...

  4. Elasticsearch7.X 入门学习第三课笔记----search api学习(URI Search)

    原文:Elasticsearch7.X 入门学习第三课笔记----search api学习(URI Search) 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出 ...

  5. Elasticsearch7.X 入门学习第九课笔记-----聚合分析Aggregation

    原文:Elasticsearch7.X 入门学习第九课笔记-----聚合分析Aggregation 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. ...

  6. Elasticsearch7.X 入门学习第二课笔记----基本api操作和CRUD

    原文:Elasticsearch7.X 入门学习第二课笔记----基本api操作和CRUD 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链 ...

  7. Elasticsearch7.X 入门学习第一课笔记----基本概念

    原文:Elasticsearch7.X 入门学习第一课笔记----基本概念 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https: ...

  8. Redis学习第八课:Redis高级实用特性(一)

    Redis高级实用特性 注:我学习的环境是vmware7.1 + ubantu10.10+ redis 3.0.2 1.安全性 设置客户端连接后进行任何其他指定前需要的密码.因为redis速度相当快, ...

  9. salesforce 零基础开发入门学习(八)数据分页简单制作

    本篇介绍通过使用VF自带标签和Apex实现简单的数据翻页功能. 代码上来之前首先简单介绍一下本篇用到的主要知识: 1.ApexPages命名空间 此命名空间下的类用于VF的控制. 主要的类包括但不限于 ...

随机推荐

  1. new Date(str)返回 Invalid date问题

    var date=new Date($("input[name='mettingTime']").val().replace(/-/g, "/")); var ...

  2. 【bzoj3998】[TJOI2015]弦论

    题目描述: 对于一个给定长度为N的字符串,求它的第K小子串是什么. 样例输入: aabc 0 3 样例输出: aab 题解: 构造后缀自动机,然后在后缀自动机上跑dfs 代码: #include &l ...

  3. Linux一些最基础操作

    最后更新时间: 2015-05-06 这是一篇很早之前写的,整理笔记的时候看到了,Linux 非常基础操作. bin/sbin: 一般是存放可以执行文件 绝对路径 相对路径 mkdir dir ls: ...

  4. 服务器中常见的RAID

    Standalone 最普遍的单磁盘储存方式. Cluster 集群储存是通过将数据分布到集群中各节点的存储方式,提供单一的使用接口与界面,使用户可以方便地对所有数据进行统一使用与管理. Hot sw ...

  5. Springboot-H2DB

    为什么在Springboot中用H2DB 用Springboot开发需要连接数据库的程序的时候,使用H2DB作为内存数据库可以很方便的调试程序. 怎么用 1.加入依赖 <dependency&g ...

  6. 网络处理器(Network Processor)

    网络处理器(Network Processor,简称NP),又可以称为交换芯片,专用于实现核心交换机高速转发功能. 根据网络处理器会议(Network Processors Conference)的定 ...

  7. 线性中继器 Linear Repeater

     线性中继器(Linear Repeater,缩写L-REP) 高速信号在传输介质上传递时,信号衰减和噪声会导致有效数据信号越来越弱.L-REP就是用来再生高速信号,通过使用同等化(Equalizat ...

  8. ARM非对齐访问和Alignment Fault

    1.指令对齐 A64指令必须word对齐.尝试在非对齐地址取值会触发PC alignment fault. 1.1.PC alignment checking PC(Program Counter)寄 ...

  9. 7月清北学(zao)堂系列

    7.13:模拟,贪心(贪心题大赏),考试 7.14:分治,分块,搜索(大法师大法好),数论 7.15:数据结构(树状数组,线段树,),ST表,树上倍增求LCA 7.16:图论题大赏(分层建图神马的), ...

  10. fatal: repository 'xxxx' not found

    环境:centOS7  背景:公司代码仓库迁移,因而配置的jenkins自动打包git地址也要跟着变化. 问题描述:git clone http xxxx.git后报错: fatal: reposit ...