ElastaticSearch
- ElastaticSearch 推荐度:
- 相关推荐
ElastaticSearch
在使用es时,我们经常会用到聚合查询。
简单的聚合查询,已经在前面介绍过,详情见: .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" : "聚合求和字段"}}}}}}
最新文章
- 如何用ping命令检查网络故障
- 电脑出现蓝屏代码0x00000050的解决方法
- HTML5中自定义数据属性data
- 智能巡检软件哪个好?中小企业如何提升工作效率与质量?
- 【ArcGIS Pro微课1000例】0031:las点云提取(根据范围裁剪点云)
- axios不经过全局拦截器策略
- 驱动程序编进内核或则编成模块
- 跨境国际快递物流API:加速全球贸易的关键
- 【渗透实战】木马免杀
- 【Spring进阶系列丨第一篇】初识Spring开发
- 【汇编】计算机的组成
- 2.3 Windows驱动开发:内核字符串转换方法
- 【KVM
- 微信小程序:仅前端实现对象数组的模糊查询
- Transformers 中原生支持的量化方案概述
- 2023年09月电子学会青少年软件编程(C语言)等级考试试卷(二级)
- 使用opencv实现图像的畸形矫正:仿射变换