聚合搜索:Aggregations
概述
基本概念
在Elasticsearch 中,聚合查询是一种分析和统计数据的功能。聚合查询能够处理大量的数据,执行各种统计分析,如计算总数、平均值、最大值、最小值、标准差等等,并生成相应的报告。
聚合(aggs)不同于普通查询,是目前学到的第二种大的查询分类,第一种即query,因此在代码中的第一层嵌套由query变为了aggs。
使用场景
聚合查询可以用于各种场景,比如商业智能、数据挖掘、日志分析等等。
电商平台的销售分析:统计每个地区的销售额、每个用户的消费总额、每个产品的销售量等,以便更好地了解销售情况和趋势。
社交媒体的用户行为分析:统计每个用户的发布次数、转发次数、评论次数等,以便更好地了解用户行为和趋势,同时可以将数据按照地区、时间、话题等维度进行分析。
物流企业的运输分析:统计每个区域的运输量、每个车辆的运输次数、每个司机的行驶里程等,以便更好地了解运输情况和优化运输效率。
金融企业的交易分析:统计每个客户的交易总额、每个产品的销售量、每个交易员的业绩等,以便更好地了解交易情况和优化业务流程。
智能家居的设备监控分析:统计每个设备的使用次数、每个家庭的能源消耗量、每个时间段的设备使用率等,以便更好地了解用户需求和优化设备效能。
基本语法
聚合查询的语法结构与其他查询相似,通常包含以下部分:
查询条件:指定需要聚合的文档,可以使用标准的 Elasticsearch 查询语法,如 term、match、range 等等。
聚合函数:指定要执行的聚合操作,如 sum、avg、min、max、terms、date_histogram 等等。每个聚合命令都会生成一个聚合结果。
聚合嵌套:聚合命令可以嵌套,以便更细致地分析数据。
GET <index_name>/_search
{
"aggs": {
"<aggs_name>": { // 聚合名称需要自己定义
"<agg_type>": {
"field": "<field_name>"
}
}
}
}
aggs_name: 聚合函数的名称
agg_type: 聚合种类,比如是桶聚合(terms)或者是指标聚合(avg、sum、min、max等)
示例:查询订单商品的分类为空调的品牌分类统计
GET orders/_search
{
"query":{
"term": {
"prod_cls": {
"value": "空调"
}
}
},
"aggs": {
"terms_agg": {
"terms": {
"field": "Brand"
}
}
}
}