前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >ES聚合操作

ES聚合操作

作者头像
shengjk1
发布于 2025-05-16 02:06:45
发布于 2025-05-16 02:06:45
4700
代码可运行
举报
文章被收录于专栏:码字搬砖码字搬砖
运行总次数:0
代码可运行

ES 聚合操作网上资料很乱,现简述一下工作中比较常用的方式( es 5 )

单聚合
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select sum(memory) from courier_app_statitics group by cid where day>=20200716 and city_id=3101

与此等价的代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
TransportClient transportClient = getTransportClient("xxxxxx:9300");
		
		BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
		boolQueryBuilder.must(QueryBuilders.matchQuery("city_id", 3101));
		RangeQueryBuilder rangeQueryBuilder = new RangeQueryBuilder("day").gte(20200716);
		boolQueryBuilder.must(rangeQueryBuilder);
		SearchRequestBuilder srb = transportClient
				.prepareSearch()
				.setIndices("index").setTypes("type")
				.setQuery(boolQueryBuilder);
		
		SumAggregationBuilder sumCancelOrders = AggregationBuilders.sum("cid").field("memory");
		srb.addAggregation(sumCancelOrders);
		
		SearchResponse searchResponse = srb.get();
		InternalSum sum = searchResponse.getAggregations().get("cid");
		System.out.println("sum.getValue() = " + sum + "==" + (int) sum.getValue());


/**
	 * @param ESAddress
	 * @return
	 * @throws UnknownHostException
	 */
	public static TransportClient getTransportClient(String ESAddress) throws UnknownHostException {
		System.setProperty("es.set.netty.runtime.available.processors", "false");
		Settings settings = Settings.builder()
				//集群名称
//				.put("cluster.name", "onesearch")
				.put("client.transport.ignore_cluster_name", true)
				//自动嗅探
				.put("client.transport.sniff", true)
				.build();
		PreBuiltTransportClient preBuiltTransportClient = new PreBuiltTransportClient(settings);
		LOGGER.info("ESAddress {}", ESAddress);
		for (String s : ESAddress.split(",", -1)) {
			String[] split = s.split(":", -1);
			preBuiltTransportClient.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName(split[0]), Integer.parseInt(split[1])));
		}
		return preBuiltTransportClient;
	}
多聚合
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select sum(memory) as six_total_memory ,sum(age) as six_total_ages	from courier_app_statitics group by cid where day>=20200716 and city_id=3101

与此等价的代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
TermsAggregationBuilder field = AggregationBuilders.terms("cid").field("cid");
		SumAggregationBuilder sumCancelOrders = AggregationBuilders.sum("six_total_memory").field("memory");
		field.subAggregation(sumCancelOrders);
		SumAggregationBuilder sumFinishOrders = AggregationBuilders.sum("six_total_ages").field("age");
		field.subAggregation(sumFinishOrders);
		srb.addAggregation(field);
//		srb.setSize(0);
		
		
		SearchResponse searchResponse = srb.get();
		Aggregations aggregations = searchResponse.getAggregations();
		Terms terms = aggregations.get("cid");
		for (int i = 0; i < terms.getBuckets().size(); i++) {
			//statistics
			List<? extends Terms.Bucket> buckets = terms.getBuckets();
			String id = terms.getBuckets().get(i).getKey().toString();//id
			InternalSum sum = terms.getBuckets().get(i).getAggregations().get("six_total_memory");//数量
			InternalSum sum1 = terms.getBuckets().get(i).getAggregations().get("six_total_ages");//数量
			System.out.println("==" + id + "------six_total_memory " + sum.getValue() + " six_total_ages " + sum1.getValue());
		}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-05-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验