Elasticsearch 中如何巧妙地使用聚合函数达到数据库中having的效果

本文介绍了如何在Elasticsearch中利用聚合函数模拟数据库的HAVING条件,通过minDocCount参数进行初步筛选,并结合Top Hits Aggregation在聚合结果中返回相关字段信息,确保数据一致性。
摘要由CSDN通过智能技术生成

在现实开发中难免会遇到一些业务场景,通过聚合得出相应的频次并进行筛选

1.使用 minDocCount  直接上代码,大家可自行根据业务场景更改

 

//正确答案
SearchRequestBuilder search = transportlient.prepareSearch("bigdata_idx_2").setTypes("captureCompare");
FilterAggregationBuilder sub= AggregationBuilders.filter("channel_longitudeC").filter(QueryBuilders.rangeQuery("fcmp_time").from(startTime).to(endTime));
//分组字段是id,排序由多个字段排序组成
TermsBuilder tb= AggregationBuilders.terms("fcmp_fobj_id").field("fcmp_fobj_id").valueType(Terms.ValueType.STRING).order(Terms.Order.compound(
Terms.Order.aggregation("channel_longitudeC",false)//先按count,降序排
//如果count相等情况下,使用code的和排序
));
//求和字段1
ValueCountBuilder sb= AggregationBuilders.count("channel_longitudeC");
tb.subAggregation(sb).minDocCount(400);//添加到分组聚合请求中

//将分组聚合请求插入到主请求体重
// search.setPostFilter()
search.addAggregation(tb);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

格赚

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值