Elasticsearch7.X 入门学习第八课笔记-----索引模板和动态模板
原文:Elasticsearch7.X 入门学习第八课笔记-----索引模板和动态模板
版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。
本章,我们将简单介绍索引模板和动态模板的内容。其实,在前面章节,我们已经粗略地用到了动态模板,但是没有明确提出这样的概念。
索引模板Index Template
索引模板,英文名为Index Template。它是一种机制,这种机制允许我们定义一种模板,这种模板当新索引创建时将被自动应用。模板包含settings和mapping,以及这个模板是否可被应用于新的索引。
索引模板有以下限制:
- 索引模板仅在一个索引新创建时才起作用,修改模板不会影响已创建的索引。
- 可以设定多个索引模板,这些索引模板的设置将被
merge在一起。 - 可以通过对索引模板指定
order的数值,来控制merge的过程。
模板定义可以如下:
-
{
-
"order": 0, // 模板优先级
-
"template": "sample_info*", // 模板匹配的名称方式
-
"settings": {...}, // 索引设置
-
"mappings": {...}, // 索引中各字段的映射定义
-
"aliases": {...} // 索引的别名
-
}
接下来,我们创建两个模板。
接下来,我们创建两个模板。
-
# 创建一个默认模板,模板名为 template_default
-
# 这个模板匹配所有的索引,它的order属性值为0。索引创建时将被设置一个分片,一个副本。
-
PUT _template/template_default
-
{
-
"index_patterns": ["*"],
-
"order" : 0,
-
"version": 1,
-
"settings": {
-
"number_of_shards": 1,
-
"number_of_replicas":1
-
}
-
}
-
-
# 创建一个模板,模板名为 template_test
-
# 这个模板匹配test开头的索引,它的order属性值为1。索引创建时将被设置一个分片,两个副本。
-
# 并且,date类型自动检测功能将关闭,数字自动检测功能将开启。
-
PUT /_template/template_test
-
{
-
"index_patterns" : ["test*"],
-
"order" : 1,
-
"settings" : {
-
"number_of_shards": 1,
-
"number_of_replicas" : 2
-
},
-
"mappings" : {
-
"date_detection": false,
-
"numeric_detection": true
-
}
-
}
-
-
# 删除模板名为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
1、模板优先级
有时候,一个模板可能绝大部分符合新建索引的需求,但是局部需要微调,此时,如果复制旧的模板,修改该模板后,成为一个新的索引模板即可达到我们的需求,但是这操作略显重复。此时,可以采用模板叠加与覆盖来操作。模板的优先级是通过模板中的 order 字段定义的,数字越大,优先级越高。
- 应用Elasticsearch默认的
settings和mappings。 - 应用 order 数值低的索引模板中的设置。
- 应用 order 数值高的索引模板中的设置
- 应用索引创建时,用户指定的
settings和mappings
2、索引模板的匹配
索引模板中的 index_patterns字段定义的是该索引模板所应用的索引情况。如 "index_patterns" : ["test*"] 所表示的含义是,当新建索引时,所有以 tete 开头的索引都会自动匹配到该索引模板。利用该模板进行相应的设置和字段添加等。
3、setting 部分
索引模板中的 setting 部分一般定义的是索引的主分片、拷贝分片、刷新时间、自定义分析器等。常见的 setting 部分结构如下:
-
-
"settings": {
-
"index": {
-
"analysis": {...}, // 自定义的分析器
-
"number_of_shards": "32", // 主分片的个数
-
"number_of_replicas": "1", // 主分片的拷贝分片个数
-
"refresh_interval": "5s" // 刷新时间
-
}
-
}
-
建立的索引,不会立马查到,这是为什么 Elasticsearch 为 near-real-time(接近实时)的原因,需要配置刷新时间,默认的是 1s。setting 的设置中,重点是自定义分析器的设置。
分析器是三个顺序执行的组件的结合。他们分别是字符过滤器、分词器、标记过滤器。
动态模板
动态模板,英文名为Dynamic Templates,是根据Elasticsearch可识别的数据类型,结合字段名称,来动态设定字段类型的一种机制。
而Elasticsearch自带了动态字段映射,它的规则如下所示。
动态字段映射
通过动态模板这种机制,我们可以达到类似下面的效果:
- 所有的字符串类型都设定成
keyword,或者关闭keyword字段。 is开头的字段都设置成boolean类型。long_开头的字段都设置成long类型。
它的语法如下所示:
动态模板的语法
这种语法包含以下内容:
- 动态模板是定义在某个具体索引的mappings中
- 动态模板需要指定一个名称,例如上图的
my_template_name - 匹配规则是一个数组
- 为匹配到的字段设置
mapping
1. 例子1
-
DELETE my_index
-
# 简单的例子
-
PUT my_index
-
{
-
"mappings": {
-
"dynamic_templates": [
-
{
-
"strings_as_boolean": {
-
"match_mapping_type": "string",
-
"match":"is*",
-
"mapping": {
-
"type": "boolean"
-
}
-
}
-
},
-
{
-
"strings_as_keywords": {
-
"match_mapping_type": "string",
-
"mapping": {
-
"type": "keyword"
-
}
-
}
-
}
-
]
-
}
-
}
-
PUT my_index/_doc/1
-
{
-
"firstName":"Ruan",
-
"isVIP":"true"
-
}
-
GET my_index/_mapping
在这个例子中,我们设置了两个动态模板。
- 根据
strings_as_boolean的动态模板定义,如果字段类型为字符串类型,且字段名以is开头,其字段类型将映射成boolean类型。 - 根据
strings_as_keywords的动态模板定义,如果字段类型为字符串类型,其字段类型将映射成keyword类型。
2. 例子2
-
DELETE my_index
-
# 路径的例子
-
PUT my_index
-
{
-
"mappings": {
-
"dynamic_templates": [
-
{
-
"full_name": {
-
"path_match": "name.*",
-
"path_unmatch": "*.middle",
-
"mapping": {
-
"type": "text",
-
"copy_to": "full_name"
-
}
-
}
-
}
-
]
-
}
-
}
-
-
-
PUT my_index/_doc/1
-
{
-
"name": {
-
"first": "John",
-
"middle": "Winston",
-
"last": "Lennon"
-
}
-
}
-
-
GET my_index/_search?q=full_name:John
在这个例子中,我们定义了一个动态模板,名字叫full_name。它会匹配路径,路径以name开头,且不以middle结尾的字段,将被映射成一个text,且拷贝到full_name这个字段中。
总结
我们了解了索引模板和动态模板各自的作用,也举了一些实际的例子来加深我们的印象。但是,更全面的内容还需要看Elasticsearch的官网。
Elasticsearch7.X 入门学习第八课笔记-----索引模板和动态模板的更多相关文章
- Elasticsearch7.X 入门学习第七课笔记-----Mapping多字段与自定义Analyzer
原文:Elasticsearch7.X 入门学习第七课笔记-----Mapping多字段与自定义Analyzer 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处 ...
- Elasticsearch7.X 入门学习第五课笔记---- - Mapping设定介绍
原文:Elasticsearch7.X 入门学习第五课笔记---- - Mapping设定介绍 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本 ...
- Elasticsearch7.X 入门学习第四课笔记---- Search API之(Request Body Search 和DSL简介)
原文:Elasticsearch7.X 入门学习第四课笔记---- Search API之(Request Body Search 和DSL简介) 版权声明:本文为博主原创文章,遵循CC 4.0 BY ...
- Elasticsearch7.X 入门学习第三课笔记----search api学习(URI Search)
原文:Elasticsearch7.X 入门学习第三课笔记----search api学习(URI Search) 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出 ...
- Elasticsearch7.X 入门学习第九课笔记-----聚合分析Aggregation
原文:Elasticsearch7.X 入门学习第九课笔记-----聚合分析Aggregation 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. ...
- Elasticsearch7.X 入门学习第二课笔记----基本api操作和CRUD
原文:Elasticsearch7.X 入门学习第二课笔记----基本api操作和CRUD 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链 ...
- Elasticsearch7.X 入门学习第一课笔记----基本概念
原文:Elasticsearch7.X 入门学习第一课笔记----基本概念 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https: ...
- Redis学习第八课:Redis高级实用特性(一)
Redis高级实用特性 注:我学习的环境是vmware7.1 + ubantu10.10+ redis 3.0.2 1.安全性 设置客户端连接后进行任何其他指定前需要的密码.因为redis速度相当快, ...
- salesforce 零基础开发入门学习(八)数据分页简单制作
本篇介绍通过使用VF自带标签和Apex实现简单的数据翻页功能. 代码上来之前首先简单介绍一下本篇用到的主要知识: 1.ApexPages命名空间 此命名空间下的类用于VF的控制. 主要的类包括但不限于 ...
随机推荐
- 大数据学习笔记之初识Hadoop
1.Hadoop概述 1.1 Hadoop名字的由来 Hadoop项目作者的孩子给一个棕黄色的大象样子的填充玩具的命名 Hadoop的官网:http://hadoop.apache.org . 1.2 ...
- for-in语句和with语句、break和continue语句
for-in语句 for-in语句是一种精准迭代语句,可以用来枚举对象的属性,用以遍历一个对象的全部属性. for…in声明用于对数组或者对象的属性进行循环操作: for…in循环中的代码每执行一次, ...
- C#与.NET Framework c#编程语言,和java是一样的。(c#,java) -->javaweb,asp.net
- [UVA160]Factors and Factorials 题解
前言 这道题目本身毫无技术含量珂言,但是输出格式珂以调一年 题解 这道题让我们求\(N!\)中每个质数的个数. 一种方法是直接模拟,枚举\(N!\)中的每个元素,然后暴力查看每个数含有有多少质数. 但 ...
- [CF938E]Max History题解
题面 >CF传送门< >洛谷传送门< 解法 显而易见,对于一个数\(a_i\),若果它出现在\(f\)序列中,必定\(a_i\)之前的元素要小于\(a_i\),我们设\(cnt ...
- 【bzoj1324】Exca王者之剑(8-9 方格取数问题)
*题目描述: 在一个有m*n (m,n<=100)个方格的棋盘中,每个方格中有一个正整数.现要从方格中取数,使任意2 个数所在方格没有公共边,且取出的数的总和最大.试设计一个满足要求的取数算法, ...
- 后端PHP框架laravel学习踩的各种坑
安装完laravel的ventor目录后出现“Whoops, looks like something went wrong.”这样的错误信息 打开config/app.php,打开debug为tru ...
- Dreamweaver cc新版本css单行显示
新版本通用:(1)C:\Users\admin\Application Data\Adobe\Dreamweaver CC 2018\cloudpref\Adobe Dreamweaver CC 20 ...
- progress组件(进度条)
progress组件:进度条 progress组件的属性: percent:类型:number 设置百分比 (0~100) show-info:类型:布尔 在进度条右侧显示百分比 border-rad ...
- java虚拟机规范-运行时数据区
前言 java虚拟机是java跨平台的基石,本文的描述以jdk7.0为准,其他版本可能会有一些微调. 引用 java虚拟机规范 数据类型 java总共有两种数据类型:基本类型和引用类型.java虚拟机 ...