Implementing Elasticsearch aggregation queries using Java

To implement various aggregation queries for Elasticsearch using Java, you need to add dependencies for the Elasticsearch Java client in the Java project. Firstly, add the following Maven coordinates to your pom.xml file: <dependency> <groupId>org.elasticsearch.client</groupId> <artifactId>elasticsearch-rest-high-level-client</artifactId> <version>7.14.0</version> </dependency> Then, you need to create an instance of the Elasticsearch advanced REST client: RestHighLevelClient client = new RestHighLevelClient( RestClient.builder(new HttpHost("localhost", 9200, "http"))); Now, you can use Java to implement various data aggregation queries. 1. Group statistics by field: SearchRequest searchRequest = new SearchRequest("your-index"); SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); TermsAggregationBuilder termsAggregationBuilder = AggregationBuilders.terms("group_by_field") .field("your-field"); searchSourceBuilder.aggregation(termsAggregationBuilder); searchRequest.source(searchSourceBuilder); SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT); Terms terms = searchResponse.getAggregations().get("group_by_field"); List<? extends Terms.Bucket> buckets = terms.getBuckets(); for (Terms.Bucket bucket : buckets) { String key = bucket.getKeyAsString(); long docCount = bucket.getDocCount(); System.out.println("Key: " + key + ", DocCount: " + docCount); } 2. Calculate the minimum, maximum, average, and total values of a certain field: SearchRequest searchRequest = new SearchRequest("your-index"); SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); StatsAggregationBuilder statsAggregation = AggregationBuilders.stats("your_stats") .field("your-field"); searchSourceBuilder.aggregation(statsAggregation); searchRequest.source(searchSourceBuilder); SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT); Stats stats = searchResponse.getAggregations().get("your_stats"); double min = stats.getMin(); double max = stats.getMax(); double avg = stats.getAvg(); double sum = stats.getSum(); System.out.println("Min: " + min + ", Max: " + max + ", Avg: " + avg + ", Sum: " + sum); 3. Group statistics by time range: SearchRequest searchRequest = new SearchRequest("your-index"); SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); DateRangeAggregationBuilder dateRangeAggregation = AggregationBuilders.dateRange("date_range") .field("your-date-field") .format("yyyy-MM-dd") .addRange("2022-01-01", "2022-03-31") .addRange("2022-04-01", "2022-06-30"); searchSourceBuilder.aggregation(dateRangeAggregation); searchRequest.source(searchSourceBuilder); SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT); DateRange dateRange = searchResponse.getAggregations().get("date_range"); List<? extends DateRange.Bucket> buckets = dateRange.getBuckets(); for (DateRange.Bucket bucket : buckets) { String key = bucket.getKeyAsString(); long docCount = bucket.getDocCount(); System.out.println("Key: " + key + ", DocCount: " + docCount); } These examples demonstrate how to use Java to implement some common aggregation queries for Elasticsearch. You can make appropriate modifications and customizations according to your needs.