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;
}