在线文字转语音网站:无界智能 aiwjzn.com

使用Java实现Elasticsearch聚合查询

要使用Java实现Elasticsearch各种聚合查询,您需要在Java项目中添加Elasticsearch Java客户端的依赖。 首先,在您的pom.xml文件中添加以下Maven坐标: <dependency> <groupId>org.elasticsearch.client</groupId> <artifactId>elasticsearch-rest-high-level-client</artifactId> <version>7.14.0</version> </dependency> 然后,您需要创建一个Elasticsearch高级 REST 客户端的实例: RestHighLevelClient client = new RestHighLevelClient( RestClient.builder(new HttpHost("localhost", 9200, "http"))); 现在,您可以使用Java来实现各种数据聚合查询。 1. 按字段进行分组统计: 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. 计算某个字段的最小值、最大值、平均值和总和: 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. 按时间范围分组统计: 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); } 这些示例演示了如何使用Java实现Elasticsearch的一些常见聚合查询。您可以根据您的需求进行适当的修改和定制。