首页
登录
原
Elasticsearch Index Template 和 Dynamic Template
201
人阅读
2020/12/12 20:27
总访问:
163032
评论:
0
手机
收藏
分类:
云产品
 >#Elasticsearch Index Template和Dynamic Template [TOC] 什么是 Index Template ------------ tn>可以通过一定的规则去设定 Mappings 和 Settings,并自动匹配到新创建的索引之上(比如设置副本数,或通过键命名规则指定类型) (1) 模版仅在一个索引被新创建时,才会产生作用。修改模版不会影响已被创建的索引 (2) 你可以设定多个索引模版,这些设置会被 “merge” 在一起 (3) 你可以指定 “order” 的数值,控制 “merging” 的过程 Index Template 的工作方式 ------------ ```mermaid graph TD A(创建索引) --> B(应用 Elasticsearch 默认的 settings 和 mappings) --> C(应用 order 数值低的 Index Template 中的设定) --> D(应用 order 高的 Index Template 中的设定) ``` tn>应用创建索引时,用户所指定的 Settings 和 Mappings,并覆盖之前模版中的设定;注意数值高的会覆盖数值低的 Demo ------------ > 创建 2 个 Index Templates ```bash #创建一个文档 PUT ttemplate/_doc/1 { "someNumber":"1", "someDate":"2019/01/01" } #数字字符串被映射成text,日期字符串被映射成日期,并没有达到我们所预期的效果 GET ttemplate/_mapping #Create a default template PUT _template/template_default { "index_patterns": ["*"], "order" : 0, "version": 1, "settings": { "number_of_shards": 1, "number_of_replicas":1 } } 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 } } ``` | | | | ------------ | ------------ | | number_of_shards | 是指索引要做多少个分片,只能在创建索引时指定,后期无法修改。 | | number_of_replicas | 是指每个分片有多少个副本,后期可以动态修改 | | date_detection | 是否使用Date类型的去识别字段 | | numeric_detection | 是否使用数值类型去识别字段 | > 查看template信息 ```bash GET /_template/template_default GET /_template/temp* ```  >我们再次来尝试一下 ```bash #写入新的数据,index以test开头 PUT testtemplate/_doc/1 { "someNumber":"1", "someDate":"2019/01/01" } GET testtemplate/_mapping get testtemplate/_settings ``` tn>如下图,我们可以发现以test开头对应了前面第二条模版规则,由于时间类型验证没有开启,所以系统将**someDate**字段识别成了text文本类型。由于我们开启了数值类型验证,将**someNumber**识别成数值类型  tn>同样setting中**number_of_shards**设置成了1,**number_of_replicas**设置成了2  >### 问题一 tn>既然有这种模版规则,那自定义的setting会不会覆盖模版呢?我们准备了几行简单的代码。。 ```bash PUT testmy { "settings":{ "number_of_replicas":5 } } put testmy/_doc/1 { "key":"value" } get testmy/_settings ``` tn>我们发现它先按照模版来设定,再按照我们自定义的来设定。所以自定义的把原先的给覆盖掉了。  什么是 Dynamic Template ------------ tn>根据 Elasticsearch 识别的数据类型,结合字段名称,来动态设定字段类型 (1) 所有的字符串类型都设定成 Keyword,或者关闭 keyword 字段 (2) is 开头的字段都设置成 boolean (3) long_ 开头的都设置成 long 类型 ```bash 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" } } } ] } } ``` >创建一个**Dynamic Template**,规则是以**is**为开头的字段的类型指定为**boolean**类型;把**string**类型转为**keyword**类型。接下来我们放一些数据看看。。。 ```bash PUT my_index/_doc/1 { "firstName":"Ruan", "isVIP":"true" } GET my_index/_mapping ```  >我们还可以将键值通过模版进行匹配,下面就是**name**下第一个字段到**last**之间的字段复制到**full_name**字段中去。 ```bash #结合路径 PUT my_index { "mappings": { "dynamic_templates": [ { "full_name": { "path_match": "name.*", "path_unmatch": "*.last", "mapping": { "type": "text", "copy_to": "full_name" } } } ] } } ``` tn>然后我们通过full_name字段查询John或Winston都可以查询得到 ```bash PUT my_index/_doc/1 { "name": { "first": "John", "middle": "Winston", "last": "Lennon" } } GET my_index/_search?q=full_name:Winston ``` 
欢迎加群讨论技术,群号:677373950
评价
{{titleitem}}
{{titleitem}}
{{item.content}}
{{titleitem}}
{{titleitem}}
{{item.content}}
尘叶心繁
这一世以无限游戏为使命!
博主信息
排名
6
文章
6
粉丝
16
评论
8
文章类别
.net后台框架
112篇
linux
8篇
linux中cve
1篇
windows中cve
0篇
资源分享
7篇
Win32
2篇
前端
24篇
传说中的c
4篇
Xamarin
1篇
docker
7篇
容器编排
27篇
grpc
4篇
Go
13篇
yaml模板
1篇
理论
1篇
更多
Sqlserver
2篇
云产品
18篇
git
2篇
Unity
1篇
考证
1篇
RabbitMq
8篇
最新文章
.netcore3.1 RabbitMq Routing的应用
好看的文件管理
.netcore3.1 RabbitMq 工作队列轮询与确认消息
.net core 3.1 Identity Server4 (实现Microsoft登录)
.net core 3.1 Identity Server4 (实现VisualStudio登录)
.net core 3.1 Identity Server4 (实现GitHub登录)
.netcore3.1 RabbitMq 简单运用与相关方法的介绍
.net core 3.1 Identity Server4 (自定义模式)
RabbitMq 对配置文件的操作
RabbitMq 命令行运用
Go 语言可变参数和defer
最新评价
{{item.articleTitle}}
{{item.blogName}}
:
{{item.content}}
关于我们
ICP备案 :
渝ICP备18016597号-1
网站信息:
2018-2020TNBLOG.NET
技术交流:
群号677373950
欢迎加群
欢迎加群交流技术