Elasticsearch Java API: 统计每日总数 - 时间戳聚合
要使用Java统计每日总数,您可以使用Elasticsearch的聚合功能来实现。以下是一个示例代码:\n\njava\nimport org.elasticsearch.action.search.SearchRequest;\nimport org.elasticsearch.action.search.SearchResponse;\nimport org.elasticsearch.client.RequestOptions;\nimport org.elasticsearch.client.RestClient;\nimport org.elasticsearch.client.RestHighLevelClient;\nimport org.elasticsearch.index.query.QueryBuilders;\nimport org.elasticsearch.search.aggregations.AggregationBuilders;\nimport org.elasticsearch.search.aggregations.bucket.histogram.DateHistogramInterval;\nimport org.elasticsearch.search.aggregations.bucket.histogram.Histogram;\nimport org.elasticsearch.search.aggregations.metrics.sum.Sum;\nimport org.elasticsearch.search.builder.SearchSourceBuilder;\n\nimport java.io.IOException;\nimport java.util.Date;\n\npublic class ElasticsearchExample {\n\n public static void main(String[] args) {\n try (RestHighLevelClient client = new RestHighLevelClient(\n RestClient.builder("localhost:9200"))) {\n\n SearchRequest searchRequest = new SearchRequest("your_index");\n SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();\n \n // 设置查询条件,这里假设数据中有一个字段名为"timestamp",存储时间戳\n searchSourceBuilder.query(QueryBuilders.matchAllQuery());\n \n // 设置聚合条件,按照时间戳字段进行分桶\n searchSourceBuilder.aggregation(\n AggregationBuilders.dateHistogram("daily_count")\n .field("timestamp")\n .calendarInterval(DateHistogramInterval.DAY)\n .subAggregation(AggregationBuilders.sum("total_count").field("count_field")));\n \n searchRequest.source(searchSourceBuilder);\n SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);\n\n // 解析聚合结果\n Histogram histogram = searchResponse.getAggregations().get("daily_count");\n for (Histogram.Bucket bucket : histogram.getBuckets()) {\n Date date = new Date(Long.parseLong(bucket.getKeyAsString()));\n Sum sum = bucket.getAggregations().get("total_count");\n double totalCount = sum.getValue();\n System.out.println("Date: " + date + ", Total Count: " + totalCount);\n }\n\n } catch (IOException e) {\n e.printStackTrace();\n }\n }\n}\n\n\n请注意,您需要替换代码中的"your_index"为您实际的索引名称,"timestamp"为存储时间戳的字段名称,以及"count_field"为您要统计的字段名称。这个示例代码将按照每天的时间间隔进行数据分桶,并计算每个分桶中指定字段的总和。
原文地址: https://www.cveoy.top/t/topic/pqE0 著作权归作者所有。请勿转载和采集!