ES聚合操作

时间:2022-07-22
本文章向大家介绍ES聚合操作,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

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

select sum(memory) from courier_app_statitics group by cid where day>=20200716 and city_id=3101

与此等价的代码

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("courier_id");
		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;
	}