要使用Java统计每日总数,您可以使用Elasticsearch的聚合功能来实现。以下是一个示例代码:

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.index.query.QueryBuilders;
import org.elasticsearch.search.aggregations.AggregationBuilders;
import org.elasticsearch.search.aggregations.bucket.histogram.DateHistogramInterval;
import org.elasticsearch.search.aggregations.bucket.histogram.Histogram;
import org.elasticsearch.search.aggregations.metrics.sum.Sum;
import org.elasticsearch.search.builder.SearchSourceBuilder;

import java.io.IOException;
import java.util.Date;

public class ElasticsearchExample {

    public static void main(String[] args) {
        try (RestHighLevelClient client = new RestHighLevelClient(
                RestClient.builder("localhost:9200"))) {

            SearchRequest searchRequest = new SearchRequest("your_index");
            SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
            
            // 设置查询条件,这里假设数据中有一个字段名为"timestamp",存储时间戳
            searchSourceBuilder.query(QueryBuilders.matchAllQuery());
            
            // 设置聚合条件,按照时间戳字段进行分桶
            searchSourceBuilder.aggregation(
                    AggregationBuilders.dateHistogram("daily_count")
                            .field("timestamp")
                            .calendarInterval(DateHistogramInterval.DAY)
                            .subAggregation(AggregationBuilders.sum("total_count").field("count_field")));
            
            searchRequest.source(searchSourceBuilder);
            SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);

            // 解析聚合结果
            Histogram histogram = searchResponse.getAggregations().get("daily_count");
            for (Histogram.Bucket bucket : histogram.getBuckets()) {
                Date date = new Date(Long.parseLong(bucket.getKeyAsString()));
                Sum sum = bucket.getAggregations().get("total_count");
                double totalCount = sum.getValue();
                System.out.println("Date: " + date + ", Total Count: " + totalCount);
            }

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

请注意,您需要替换代码中的"your_index"为您实际的索引名称,"timestamp"为存储时间戳的字段名称,以及"count_field"为您要统计的字段名称。这个示例代码将按照每天的时间间隔进行数据分桶,并计算每个分桶中指定字段的总和

elasticsearch 用java按照时间戳统计每日总数

原文地址: https://www.cveoy.top/t/topic/hHwl 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录