import com.qniao.iot.gizwits.CloudBoxData; import com.qniao.iot.gizwits.utils.EsRestClientUtil; import com.qniao.iot.machine.event.MachineIotDataReceivedEvent; 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.RestClientBuilder; import org.elasticsearch.client.RestHighLevelClient; import org.elasticsearch.index.query.BoolQueryBuilder; import org.elasticsearch.index.query.QueryBuilders; import org.elasticsearch.index.query.TermQueryBuilder; import org.elasticsearch.rest.RestStatus; import org.elasticsearch.search.aggregations.AggregationBuilder; import org.elasticsearch.search.aggregations.AggregationBuilders; import org.elasticsearch.search.aggregations.Aggregations; import org.elasticsearch.search.aggregations.bucket.terms.Terms; import org.elasticsearch.search.aggregations.bucket.terms.TermsAggregationBuilder; import org.elasticsearch.search.aggregations.metrics.ParsedStats; import org.elasticsearch.search.aggregations.metrics.ParsedTopHits; import org.elasticsearch.search.aggregations.metrics.TopHitsAggregationBuilder; import org.elasticsearch.search.builder.SearchSourceBuilder; import org.elasticsearch.search.sort.SortOrder; import java.io.IOException; import java.sql.Date; import java.time.LocalDate; import java.time.ZoneOffset; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class Demo1 { public static void main(String[] args) throws IOException { String host = "120.79.137.137:9200"; String[] nodeIpInfos = host.split(":"); RestClientBuilder builder = RestClient.builder(new HttpHost(nodeIpInfos[0], Integer.parseInt(nodeIpInfos[1]), "http")) .setRequestConfigCallback(requestConfigBuilder -> { requestConfigBuilder.setConnectTimeout(10 * 60 * 1000); requestConfigBuilder.setSocketTimeout(10 * 60 * 1000); requestConfigBuilder.setConnectionRequestTimeout(10 * 60 * 1000); return requestConfigBuilder; }); CredentialsProvider credentialsProvider = new BasicCredentialsProvider(); credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials("elastic", "qnol26215")); builder.setHttpClientConfigCallback(f -> f.setDefaultCredentialsProvider(credentialsProvider)); RestHighLevelClient client = new RestHighLevelClient(builder); SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); /*BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery() .must(QueryBuilders.termQuery("machineIotMac", 102104060100L)); searchSourceBuilder.query(queryBuilder);*/ TermsAggregationBuilder jobDurationTotal1 = AggregationBuilders.terms("stationAgg").size(100).minDocCount(1).field("machineIotMac"); TopHitsAggregationBuilder sort = AggregationBuilders.topHits("top1").size(1).sort("reportTime", SortOrder.DESC); jobDurationTotal1.subAggregation(sort); searchSourceBuilder.aggregation(jobDurationTotal1); searchSourceBuilder.size(0); SearchRequest request = new SearchRequest("machine_iot_data_received_event_*"); request.source(searchSourceBuilder); // 执行请求 SearchResponse response = client.search(request, RequestOptions.DEFAULT); // 获取响应中的聚合信息 Aggregations aggregations = response.getAggregations(); if (RestStatus.OK.equals(response.status()) || aggregations != null) { Terms jobDurationTotal = aggregations.get("stationAgg"); List buckets = jobDurationTotal.getBuckets(); ParsedTopHits topHits = buckets.get(0).getAggregations().get("top1"); System.out.println(topHits.getHits().getHits()[0].getSourceAsString()); } } }