当前位置: 首页 > news >正文

ElastaticSearch--- es多字段聚合

在使用es时,我们经常会用到聚合查询。

简单的聚合查询,已经在前面介绍过,详情见: https://www.cnblogs.com/expiator/p/13843969.html

有时,也会用到多字段聚合查询。类似于Mysql的Group By多个字段。

比如,查询统计各个地区的各个日期,各自的订单总量。

es多字段聚合

DSL的格式,如下所示:

{"size" : 0,"query" : {  },"aggregations" : {"自己命名的聚合名称1" : {"terms" : {"field" : "字段名称1","size" : 20000,"order" : {"_term" : "asc"}},"aggregations" : {"自己命名的聚合统计名称2" : {"sum" : {"field" : "字段名称2"}},"自己命名的聚合名称3" : {"terms" : {"field" : "字段名称3","size" : 20,"order" : {"_term" : "asc"}},"aggregations" : {"自己命名的聚合统计名称4" : {"sum" : {"field" : "字段名称4"}}}}}}}
} 

示例如下:

{"size" : 0,"query" : {  },"aggregations" : {"agg_area" : {"terms" : {"field" : "area","size" : 20000,"order" : {"_term" : "asc"}},"aggregations" : {"sum_area" : {"sum" : {"field" : "amount"}},"agg_day" :  {"terms" : {"field" : "day","size" : 20,"order" : {"_term" : "asc"}},"aggregations" : {"sum_day" : {"sum" : {"field" : "amount"}}}}}}}
}

es多字段聚合的java api

示例的代码如下:

public String getAggDSL() {SearchSourceBuilder searchSourceBuilder = SearchSourceBuilder.searchSource();//聚合的第二个字段AggregationBuilder dayAgg = AggregationBuilders.terms("agg_day").field("day").order(Terms.Order.aggregation(TERM, true)).size(20).subAggregation(AggregationBuilders.sum("sum_day").field("amount"));//聚合的第一个字段		AggregationBuilder areaDayAgg = AggregationBuilders.terms("agg_area").field("area").order(Terms.Order.aggregation(TERM, true)).size(10000).subAggregation(AggregationBuilders.sum("sum_area").field("amount")).subAggregation(dayAgg);		return searchSourceBuilder.query().aggregation(areaDayAgg).size(0).toString();				}

script实现es多字段聚合

es多字段聚合,对性能要求不高的话,可以使用script。

对A,B等多个字段进行聚合,那也可以直接将它们组合起来,形成A和B相关的script,
只要script的值相同,就聚合到同一组。

查询语句如下:

 {"size" : 0,"query" : {"bool" : {"filter" : [{"term" : {"过滤字段1" : {"value" : "匹配值"}}},{"term" : {"过滤字段2" : {"value" : "匹配值"}}}]}},"aggregations" : {"聚合名称" : {"terms" : {"script" : {"inline" : "doc['字段名称1'].values +'-'+ doc['字段名称2'].values","lang" : "painless"},"size" : 10000,"order" : {"排序字段" : "desc"}},"aggregations" : {"自已命令的聚合名称" : {"sum" : {"field" : "聚合求和字段"}}}}}}      
http://www.lryc.cn/news/229129.html

相关文章:

  • 本周Github有趣开源项目:Rspress等6个
  • 【华为OD题库-016】字符串摘要-Java
  • 生成式AI - Knowledge Graph Prompting:一种基于大模型的多文档问答方法
  • 深度学习AIR-PolSAR-Seg图像数据预处理
  • 求最大公约数math.gcd()
  • 数据结构之队列
  • MySQL数据库——存储过程-循环(while、repeat、loop)
  • Django路由
  • 头歌实践平台-数据结构-二叉树及其应用
  • 2023.11.11通过html内置“required-star“添加一个红色的星号来表示必填项
  • pcie【C#】
  • 西门子精智屏数据记录U盘插拔问题总结
  • (论文阅读27/100)Deep Filter Banks for Texture Recognition and Segmentation
  • ARMday06(串口)
  • Rust字符串详解
  • (四)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • Window安装MongoDB
  • 20.有效的括号(LeetCode)
  • Vue3组件传参之Mitt插件方式
  • 【数据仓库】数仓分层方法
  • Linux网络——自定义协议
  • 【OpenCV实现图像:用OpenCV图像处理技巧之巧用直方图】
  • 【Android】画面卡顿优化列表流畅度四之Glide几个常用参数设置
  • js控制手机蓝牙
  • C++11 原始字符串字面量R“()“
  • 【Vue原理解析】之虚拟DOM
  • HCIE-灾备技术和安全服务
  • 【图论实战】Boost学习 01:基本操作
  • Rust 中的引用与借用
  • Azure 机器学习:在 Azure 机器学习中使用 Azure OpenAI 模型