一、Index template
-
Index template可以帮助你设定Mappings和settings,并按照一定的规则匹配到新建的索引之上
- 模板仅在索引创建的时候才产生作用,并且不会影响已经创建的索引;
- 可以设定多个模板,最终会被合并到一起;
- 可以指定“order”的数值,控制“merging”的过程
-
Index template工作方式
当一个索引被创建的时候,在ES中会有一下过程:- ES首先使用默认的Mapping和Setting;
- 应用order数值低的Index template进行设置;
- 应用order数值高的index template进行设置,之前的设置会被覆盖;
- 应用用户创建的Mapping和Setting,之前的设置被覆盖。
看实例
#Create a default template
PUT _template/template_default
{
"index_patterns": ["*"], //默认的index template,匹配所有的index
"order" : 0,
"version": 1,
"settings": {
"number_of_shards": 1,
"number_of_replicas":1
}
}
PUT /_template/template_test //自定义的index template,匹配所有以“test”开头的index
{
"index_patterns" : ["test*"],
"order" : 1,
"settings" : {
"number_of_shards": 1, //设置分片数与副本数量
"number_of_replicas" : 2
},
"mappings" : {
"date_detection": false, //日期格式自动检测设置为false
"numeric_detection": true
}
}
//查询ES中所有以“temp”开头的index template
GET /_template/temp*
使用创建自定义的index template
PUT testtemplate/_doc/1 //以test开头,自动适配上文中“template_test ”的 index template
{
"someNumber":"1",
"someDate":"2019/01/01"
}
二、Dynamic template
根据ES识别出来的数据类型,结合字段名称,来动态设定字段类型,例如可以有一下几种设置的方式:
- 所有的字符串类型都设定成keyword,或者关闭keyword字段;
- is开头的都设定成boolean;
- long_开头的都设置成long型。
Dynamic template 是定义在某个索引的Mapping 中
Dynamic template 有一个名称
匹配规则是一个数组
为匹配到的字段设置Mapping
PUT my_index
{
"mappings": {
"dynamic_templates": [
{
"strings_as_boolean": {
"match_mapping_type": "string",
"match":"is*", //is开头的设置为boolean
"mapping": {
"type": "boolean"
}
}
},
{
"strings_as_keywords": {
"match_mapping_type": "string",
"mapping": {
"type": "keyword" //字符串映射成keyword
}
}
}
]
}
}
PUT my_index/_doc/1
{
"firstName":"Ruan",
"isVIP":"true"
}
GET my_index/_mapping
三、ES聚合分析(Aggregation)
ES除了搜索以外,还提供针对ES数据进行统计分析的功能,聚合分析支持嵌套
聚合分类
- Bucket Aggregation 一些列满足特定条件的文档的集合
- Metric Aggregation 一些数学运算,可以对文档字段进行统计分析
- Pipeline Aggregation 对其他聚合结果进行二次聚合
- Matrix Aggregation 支持对多个字段的操作,并提供一个结果矩阵
下面的例子,需要通过Kibana导入Sample Data的飞机航班数据。在kibana 开始界面,有导入的选项,选择即可导入
#查看航班目的地的统计信息,增加平均,最高最低价格
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"
}
}
}
}
}
}
网友评论