首页
视频
资源
登录
原
Elasticsearch Index Template 和 Dynamic Template
4525
人阅读
2020/12/12 20:27
总访问:
2534605
评论:
0
收藏:
0
手机
分类:
云产品
![elasticsearch](https://img.tnblog.net/arcimg/hb/5f1adabe8df94fdb8331eb80e393c4a3.jpeg "elasticsearch") >#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* ``` ![](https://img.tnblog.net/arcimg/hb/62b6d55557604a8f9fa8b10e2fd73cc5.png) >我们再次来尝试一下 ```bash #写入新的数据,index以test开头 PUT testtemplate/_doc/1 { "someNumber":"1", "someDate":"2019/01/01" } GET testtemplate/_mapping get testtemplate/_settings ``` tn>如下图,我们可以发现以test开头对应了前面第二条模版规则,由于时间类型验证没有开启,所以系统将**someDate**字段识别成了text文本类型。由于我们开启了数值类型验证,将**someNumber**识别成数值类型 ![](https://img.tnblog.net/arcimg/hb/8de1316c555d49458a278057cf5ccc0a.png) tn>同样setting中**number_of_shards**设置成了1,**number_of_replicas**设置成了2 ![](https://img.tnblog.net/arcimg/hb/f3d0f72ecbe54f90ac635f9c08e96a47.png) >### 问题一 tn>既然有这种模版规则,那自定义的setting会不会覆盖模版呢?我们准备了几行简单的代码。。 ```bash PUT testmy { "settings":{ "number_of_replicas":5 } } put testmy/_doc/1 { "key":"value" } get testmy/_settings ``` tn>我们发现它先按照模版来设定,再按照我们自定义的来设定。所以自定义的把原先的给覆盖掉了。 ![](https://img.tnblog.net/arcimg/hb/6c7798ecbff24d2b96d66d5cfd6995bb.png) 什么是 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 ``` ![](https://img.tnblog.net/arcimg/hb/7f83f257492d4af9a416e9e970d7862f.png) >我们还可以将键值通过模版进行匹配,下面就是**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 ``` ![](https://img.tnblog.net/arcimg/hb/ffe8c2851c024b73ab6d37a356e34bb7.png)
欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739
👈{{preArticle.title}}
👉{{nextArticle.title}}
评价
{{titleitem}}
{{titleitem}}
{{item.content}}
{{titleitem}}
{{titleitem}}
{{item.content}}
尘叶心繁
这一世以无限游戏为使命!
博主信息
排名
6
文章
6
粉丝
16
评论
8
文章类别
.net后台框架
166篇
linux
17篇
linux中cve
1篇
windows中cve
0篇
资源分享
10篇
Win32
3篇
前端
28篇
传说中的c
4篇
Xamarin
9篇
docker
15篇
容器编排
101篇
grpc
4篇
Go
15篇
yaml模板
1篇
理论
2篇
更多
Sqlserver
4篇
云产品
39篇
git
3篇
Unity
1篇
考证
2篇
RabbitMq
23篇
Harbor
1篇
Ansible
8篇
Jenkins
17篇
Vue
1篇
Ids4
18篇
istio
1篇
架构
2篇
网络
7篇
windbg
4篇
AI
18篇
threejs
2篇
人物
1篇
嵌入式
2篇
python
13篇
HuggingFace
8篇
pytorch
9篇
opencv
6篇
最新文章
最新评价
{{item.articleTitle}}
{{item.blogName}}
:
{{item.content}}
关于我们
ICP备案 :
渝ICP备18016597号-1
网站信息:
2018-2024
TNBLOG.NET
技术交流:
群号656732739
联系我们:
contact@tnblog.net
欢迎加群
欢迎加群交流技术