hi,我是蛋挞,一个初出茅庐的后端开发,希望可以和大家共同努力、共同进步!
- 起始标记->Elasticsearch入门(15讲):「21 | 基本概念:Index Template和Dynamic Template」
- 结尾标记->Elasticsearch入门(15讲):「22 | 基本概念:Elasticsearch聚合分析简介」
Index Template和Dynamic Template
什么是 Index Template
- Index Templates -帮助你设定Mappings和Settings,并按照一定的规则,自动匹配到新创建的索引之上
- 模版仅在一个索引被新创建时,才会产生作用。修改模版不会影响已创建的索引
- 你可以设定多个索引模版,这些设置会被“merge"在一起
- 你可以指定“order”的数值,控制“merging'的过程
两个 Index Templates
Index Template 的工作方式
- 当一个索引被新创建时
- 应用Elasticsearch默认的settings 和 mappings
- 应用order数值低的Index Template 中的设定
- 应用order高的Index Template 中的设定,之前的设定会被覆盖
- 引用创建索引时,用户指定的Settings和Mappings,并覆盖之前模板中的设定
什么是 Dynamic Template
- 根据Elasticsearch识别的数据类型,结合字段名称,来动态设定字段类型
- 所有的字符串类型都设定成keyword。或者关闭keyword字段
- is开头的字段都设置成boolean
- long_开头的都设置成long类型
Dynamic Template
- Dynamic Tempate是定义在在某个索引的Mapping中
- Template有一个名称
- 匹配规则是一个数组
- 为匹配到字段设置Mapping
CodeDemo
#数字字符串被映射成text,日期字符串被映射成日期 PUT ttemplate/_doc/1 { "someNumber":"1", "someDate":"2019/01/01" } 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 } }
#查看template信息 GET /_template/template_default GET /_template/temp*
#写入新的数据,index以test开头 PUT testtemplate/_doc/1 { "someNumber":"1", "someDate":"2019/01/01" } GET testtemplate/_mapping get testtemplate/_settings
PUT testmy { "settings":{ "number_of_replicas":5 } }
put testmy/_doc/1 { "key":"value" }
get testmy/_settings DELETE testmy DELETE /_template/template_default DELETE /_template/template_test
#Dynaminc Mapping 根据类型和字段名 DELETE my_index
PUT my_index/_doc/1 { "firstName":"Ruan", "isVIP":"true" }
GET my_index/_mapping 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" } } } ] } }
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
相关阅读
- Index Templates www.elastic.co/guide/en/el…
- Dynamic Template www.elastic.co/guide/en/el…
Elasticsearch聚合分析简介
什么是聚合(Aggregation)
- Elasticsearch 除搜索以外,提供的针对ES数据进行统计分析的功能
- 实时性高
- Hadoop (T+1)
- 通过聚合,我们会得到一个数据的概览,是分析和总结全套的数据,而不是寻找单个文档
- 尖沙咀和香港岛的客房数量
- 不同的价格区间,可预定的经济型酒店和五星级酒店的数量
- 高性能,只需要一条语句,就可以从Elasticsearch得到分析结果
- 无需在客户端自 己去实现分析逻辑
Kibana 可视化报表 - 聚合分析
- 公司程序员的工作岗位分布
- 公司采用的编程框架分布
- 公司员工薪水分布
- 客户的地理位置分布
- 订单的增长情况
- 等等.....
集合的分类
- Bucket Aggregation - 一些列满足特定条件的文档的集合
- Metric Aggregation - 一些数学运算,可以对文档字段进行统计分析
- Pipeline Aggregation - 对其他的聚合结果进行二次聚合
- Matrix Aggregration - 支持对多个字段的操作并提供一个结果矩阵
Bucket & Metric
Bucket
- 一些例子
- 杭州属于浙江/一个演员属于 男或女性
- 嵌套关系-杭州属于浙江属于中国属于亚洲
- Elasticsearch提供了很多类型的Bucket,帮助你用多种方式划分文档
- Term&Range(时间/年龄区间/地理位置)
Metric
- Metric会基于数据集计算结果,除了支持在字段上进行计算,同样也支持在脚本(painless script)产生的结果之,上进行计算
- 大多数Metric是数学计算,仅输出一个值
- min / max / sum / avg / cardinality
- 部分metric 支持输出多个数值
- stats / percentiles / percentile_ ranks
一个Bucket的例子
加入Metrics
查看航班目的地的统计信息,增加均价,最高最低价格
嵌套
查看航班目的地的统计信息,平均票价,以及天气状况
CodeDemo
#按照目的地进行分桶统计 GET kibana_sample_data_flights/_search { "size": 0, "aggs":{ "flight_dest":{ "terms":{ "field":"DestCountry" } } } }
#查看航班目的地的统计信息,增加平均,最高最低价格 GET kibana_sample_data_flights/_search { "size": 0, "aggs":{ "flight_dest":{ "terms":{ "field":"DestCountry" }, "aggs":{ "avg_price":{ "avg":{ "field":"AvgTicketPrice" } }, "max_price":{ "max":{ "field":"AvgTicketPrice" } }, "min_price":{ "min":{ "field":"AvgTicketPrice" } } } } } }
#价格统计信息+天气信息 GET kibana_sample_data_flights/_search { "size": 0, "aggs":{ "flight_dest":{ "terms":{ "field":"DestCountry" }, "aggs":{ "stats_price":{ "stats":{ "field":"AvgTicketPrice" } }, "wather":{ "terms": { "field": "DestWeather", "size": 5 } }
} }} }
相关阅读
总结
学习了Index Template 和 Dynamic Template 可以更加灵活的为索引创建mapping
此文章为3月Day1学习笔记,内容来源于极客时间《Elasticsearch 核心技术与实战》