ElastaticSearch---- es聚合查询
聚合(Aggregation)概念
-
Bucket Aggregation, 桶聚合,即将稳定按照特定列的值分到不同桶中
-
Metric Aggregation, 度量聚合,对文档数据的聚合结果进行运算,类似SQL中的聚合函数(比如 max min avg 等)
-
Pipeline Aggregation,管道聚合,对聚合结果进行二次聚合
-
Matrix Aggreagation,矩阵聚合,提供对多个字段聚合操作的支持
Bucket Aggregation(桶聚合):
- 按terms聚合(类似于mysql分组group by):
格式如下:
聚合名称可以自己定义,建议用'_'线来分隔单词,比如test_terms。
{
"size" : 0,
"aggs" : {
"自已命名的聚合名称,比如test_terms" : {
"terms" : {
"field" : "字段名称",
"size" : 10000,
"order" : {
"_term" : "asc"
}
}
}
}
}
解释如下:
size:第一个size,为0表示不需要返回文档,所以直接设置为0可以提高查询速度。
aggs:aggs是aggregations的缩写,可以写全称也可以缩写。
聚合名称:在aggs内部,需要自己定义一个聚合的名称,建议用'_'线来分隔单词。在返回的结果中也会用这个变量名来储存数值的。
terms:定义单个桶(集合)的类型为 terms,按里面的field 字段进行分类,类似于sql中的group by
terms size: terms里面包含的size,默认为10,表示返回聚合查询结果的条数。。
比如设置size为50,对指定的字段名称聚合分组求和后,就只会返回50条。这里的size最好不要设置为0。
order: 排序。{ "_term" : "asc" }表示按照聚合的字段名称field进行升序排列。
比如对指定的字段名称order_date聚合分组求和后,想按照order_date升序排列,就可以使用这种方式。
{ "_count" : "asc" }表示按照doc_count(文档数量)排序。默认是按照doc_count排序。
返回结果,如下所示:
{
"took": 1,
"timed_out": false,
"_shards": {
"total": 3,
"successful": 3,
"failed": 0
},
"hits": {
"total": 19,
"max_score": 0,
"hits": []
},
"aggregations": {
"自己命名的聚合名称": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": "14",
"doc_count": 16
},
{
"key": "10",
"doc_count": 3
}
]
}
}
}
解释如下:
Buckets(桶/集合):满足特定条件的文档的集合。
hits: hits为空,因为设置了返回的文档数量(size)为0,所以在这个文档里面是不会包含具体的文档的。
key:按照指定的字段分组后的字段内容。
doc_count:各个分组的数量。
Metric Aggregation(度量聚合)
类似于mysql分组统计。
比如,分组求平均值avg,求最大max,最小min等。
聚合名称1和2需要自己命名,同样会在返回结果中显示。
{
"size" : 0,
"aggs": {
"自己命名的聚合名称1": {
"terms": {
"field": "字段名称",
"size" : 10000
},
"aggs": {
"自己命名的聚合名称2": {
"avg": {
"field": "字段名称"
}
}
}
}
}
}
返回结果如下:
"aggregations": {
"聚合名称1": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": "14",
"doc_count": 16,
"聚合名称2": {
"value": 33156.1875 //这个value就是avg求得的平均值。
}
},
{
"key": "10",
"doc_count": 3,
"聚合名称2": {
"value": 662962.3333333334
}
}
]
}
另外还有一个stas聚合,可以返回包括min,max,avg,sum,count等统计信息。
{
"size" : 0,
"aggs": {
"自己命名的聚合名称1": {
"terms": {
"field": "字段名称1",
"size": 10
}, "aggs": {
"自己命名的聚合名称2": {
"stats": {
"field": "字段名称2"
}
}
}
}
}
}
返回的结果类似如下:
"aggregations": {
"dateGrup": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": "2020-10-10",
"doc_count": 19739,
"pick_num": {
"count": 17346,
"min": 1,
"max": 36148,
"avg": 55.61362850224836,
"sum": 964674
}
}]
参考资料:
http://blog.itpub.net/29715045/viewspace-2653369/
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· C++代码改造为UTF-8编码问题的总结
· 【.NET】调用本地 Deepseek 模型
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库