开发者社区> 问答> 正文

Elasticsearch RestHighLevelClient的汇总日期出现重复的日期如何处理?

使用Elasticsearch RestHighLevelClient的汇总日期出现重复的日期如何处理?

我正在使用Elasticsearch RestHighLevelClient并尝试在下面实现sql:

选择格式(日期,'yyyy-MM-dd'),从订单组中按格式(日期,'yyyy-MM-dd')计数(*)

    SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
    sourceBuilder.query(QueryBuilders.matchAllQuery());
    sourceBuilder.aggregation(AggregationBuilders.terms("date_count").field("time").format("yyyy-MM-dd"));
    SearchRequest searchRequest = new SearchRequest("order_*");
    searchRequest.source(sourceBuilder);
    SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
    Aggregations aggregations = searchResponse.getAggregations();

我得到了结果,但是有很多重复的日期结果,例如:

buckets:
  bucket1:
    key: 1583390009000
    keyAsString: 2020-03-05
    docCount: 4
  bucket2:  
    key: 1583391748000
    keyAsString: 2020-03-05
    docCount: 5

我应该如何避免重复?我的意思是同一日期(例如2020-03-05)算作一个时段。

问题来源:stackoverflow

展开
收起
montos 2020-03-21 19:38:55 2278 0
1 条回答
写回答
取消 提交回答
  • 应该使用日期直方图聚合

    SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
    sourceBuilder.query(QueryBuilders.matchAllQuery());
    //sourceBuilder.aggregation(AggregationBuilders.terms("date_count").field("time").format("yyyy-MM-dd"));
    sourceBuilder.aggregation(AggregationBuilders.dateHistogram("date_count").calendarInterval(DateHistogramInterval.DAY).field("time"));
    SearchRequest searchRequest = new SearchRequest("order_*");
    searchRequest.source(sourceBuilder);
    SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
    Aggregations aggregations = searchResponse.getAggregations();
    

    回答来源stackoverflow

    2020-03-21 19:40:53
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
阿里云Elasticsearch体系架构与特性解析 立即下载
开源与云:Elasticsearch应用剖析 立即下载
《Elasticsearch全观测解决方案》 立即下载