import org.apache.http.HttpHost; import org.apache.http.auth.AuthScope; import org.apache.http.auth.UsernamePasswordCredentials; import org.apache.http.client.CredentialsProvider; import org.apache.http.impl.client.BasicCredentialsProvider; import org.elasticsearch.action.search.SearchRequest; import org.elasticsearch.action.search.SearchResponse; import org.elasticsearch.client.RequestOptions; import org.elasticsearch.client.RestClient; import org.elasticsearch.client.RestHighLevelClient; import org.elasticsearch.rest.RestStatus; import org.elasticsearch.search.aggregations.AggregationBuilders; import org.elasticsearch.search.aggregations.Aggregations; import org.elasticsearch.search.aggregations.metrics.ParsedSum; import org.elasticsearch.search.aggregations.metrics.SumAggregationBuilder; import org.elasticsearch.search.builder.SearchSourceBuilder; import java.io.IOException; import java.math.BigDecimal; public class DemoTes { public static void main(String[] args) throws IOException { RestHighLevelClient restHighLevelClient = new RestHighLevelClient(RestClient .builder(new HttpHost("120.79.137.137", 9200, "http")) .setHttpClientConfigCallback(httpAsyncClientBuilder -> { CredentialsProvider credentialsProvider = new BasicCredentialsProvider(); credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials("elastic", "qnol26215")); return httpAsyncClientBuilder.setDefaultCredentialsProvider(credentialsProvider); }) .setRequestConfigCallback(requestConfigBuilder -> { // 设置es连接超时时间 requestConfigBuilder.setConnectTimeout(3000); return requestConfigBuilder; })); try { // 构建查询条件(注意:termQuery 支持多种格式查询,如 boolean、int、double、string 等,这里使用的是 string 的查询) /*SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); searchSourceBuilder.query(QueryBuilders.termQuery("machineIotMac", "102104060102")); searchSourceBuilder.sort("reportTime", SortOrder.DESC); searchSourceBuilder.size(1); // 创建查询请求对象,将查询对象配置到其中 SearchRequest searchRequest = new SearchRequest("machine_iot_data_received_event_202208", "machine_iot_data_received_event_202207", "machine_iot_data_received_event_197001"); searchRequest.source(searchSourceBuilder); // 执行查询,然后处理响应结果 SearchResponse searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT); // 根据状态和数据条数验证是否返回了数据 if (RestStatus.OK.equals(searchResponse.status()) && searchResponse.getHits().getTotalHits().value > 0) { SearchHits hits = searchResponse.getHits(); SearchHit reqHit = hits.getHits()[0]; MachineIotDataReceivedEvent receivedEvent = JSONUtil .toBean(reqHit.getSourceAsString(), MachineIotDataReceivedEvent.class); System.out.println(receivedEvent); }*/ SearchSourceBuilder searchSourceBuilder1 = new SearchSourceBuilder(); searchSourceBuilder1.size(0); SumAggregationBuilder sumCurrStoppingDuration = AggregationBuilders.sum("sum_currStoppingDuration").field("currStoppingDuration"); SumAggregationBuilder sumCurrWaitingDuration = AggregationBuilders.sum("sum_currWaitingDuration").field("currWaitingDuration"); searchSourceBuilder1.aggregation(sumCurrStoppingDuration); searchSourceBuilder1.aggregation(sumCurrWaitingDuration); SearchRequest request1 = new SearchRequest("machine_iot_data_received_event_*"); request1.source(searchSourceBuilder1); // 执行请求 SearchResponse response1 = restHighLevelClient.search(request1, RequestOptions.DEFAULT); Aggregations aggregations1 = response1.getAggregations(); if (RestStatus.OK.equals(response1.status()) || aggregations1 != null) { ParsedSum agg = aggregations1.get("sum_currStoppingDuration"); ParsedSum agg1 = aggregations1.get("sum_currWaitingDuration"); double value = agg.getValue(); BigDecimal bigDecimal = new BigDecimal(value); System.out.println(bigDecimal.longValueExact()); } } catch (IOException e) { } restHighLevelClient.close(); } }