目录
第1关:Elasticsearch聚合概述
任务描述
本关任务:根据所学知识,掌握什么是 Elasticsearch 聚合,以及使用聚合计算每种品牌的红色汽车销量情况。
代码
#!/bin/bash
# 请在此处编写命令
# ********** Begin ********** #
curl -H 'content-Type:application/json' -XPUT 'http://localhost:9200/cars/_mapping/transactions?pretty' -d '{
"properties": {
"make": {
"type": "text",
"fielddata": true
}
}
}'
curl -H "Content-Type: application/json" -XGET 'http://127.0.0.1:9200/cars/transactions/_search?pretty' -d '{
"size" : 0,
"query": {
"match": {
"color": "red"
}
},
"aggs" : {
"popular_make" : {
"terms" : {
"field" : "make"
}
}
}
}'
# ********** End ********** #
第2关:Elasitcsearch嵌套桶
任务描述
本关任务:计算每种价格下,每种品牌的销量情况。
相关知识
前面的关卡中我们查询了每个桶里面的文档数量。 但通常,我们的应用需要提供更复杂的文档度量。 例如,每种颜色汽车的平均价格是多少?
为了获取更多信息,我们需要告诉 Elasticsearch 使用哪个字段,计算何种度量。这需要将度量嵌套在桶内,度量会基于桶内的文档计算统计结果。
代码
#!/bin/bash
# 请在此处编写命令
# ********** Begin ********** #
curl -H 'content-Type:application/json' -XPUT 'http://localhost:9200/cars/_mapping/transactions?pretty' -d '{
"properties": {
"make": {
"type": "text",
"fielddata": true
}
}
}'
curl -H "Content-Type: application/json" -XGET 'http://127.0.0.1:9200/cars/transactions/_search?pretty' -d '{
"size" : 0,
"aggs": {
"prices": {
"terms": {
"field": "price"
},
"aggs": {
"makes": {
"terms": {
"field": "make"
}
}
}
}
}
}'
# ********** End ********** #
第3关:Elasticsearch聚合统计
任务描述
本关任务:我们构建聚合以便按季度展示所有汽车品牌总销售额。同时按季度、按每个汽车品牌计算销售总额,以便可以找出哪种品牌最赚钱。
相关知识
聚合还有一个令人激动的特性就是能够十分容易地将它们转换成图表和图形。
直方图 histogram 特别有用。 它本质上是一个条形图,如果有创建报表或分析仪表盘的经验,那么我们会毫无疑问的发现里面有一些图表是条形图。 创建直方图需要指定一个区间,如果我们要为售价创建一个直方图,可以将间隔设为 20,000。这样做将会在每个 $20,000 档创建一个新桶,然后文档会被分到对应的桶中。
对于仪表盘来说,我们希望知道每个售价区间内汽车的销量。我们还会想知道每个售价区间内汽车所带来的收入,可以通过对每个区间内已售汽车的售价求和得到。
代码
#!/bin/bash
# 请在此处编写命令
# ********** Begin ********** #
curl -H 'content-Type:application/json' -XPUT 'http://localhost:9200/cars/_mapping/transactions?pretty' -d '{
"properties": {
"make": {
"type": "text",
"fielddata": true
}
}
}'
curl -X GET "localhost:9200/cars/transactions/_search?pretty" -H 'Content-Type: application/json' -d'
{
"size" : 0,
"aggs": {
"sales": {
"date_histogram": {
"field": "sold",
"interval": "quarter",
"format": "yyyy-MM-dd",
"min_doc_count" : 0,
"extended_bounds" : {
"min" : "2014-01-01",
"max" : "2014-12-31"
}
},
"aggs": {
"per_make_sum": {
"terms": {
"field": "make"
},
"aggs": {
"sum_price": {
"sum": { "field": "price" }
}
}
},
"total_sum": {
"sum": { "field": "price" }
}
}
}
}
}
'
# ********** End ********** #
第4关:Elasticsearch指定范围聚合
任务描述
本关任务:查询汽车品牌 honda 各个颜色的平均售价。
相关知识
通过之前的学习,你可能已经注意到,我们的搜索请求省略了一个 query。 整个请求只不过是一个聚合。
聚合可以与搜索请求同时执行,但是我们需要理解一个新概念: 范围 。 默认情况下,聚合与查询是对同一范围进行操作的,也就是说,聚合是基于我们查询匹配的文档集合进行计算的。