问题
在项目开发中,需要从elasticsearch中查询接口日志数据,但是数据总是查询不准确,经过多次排查,确定是elasticsearch时区导致了查询数据不准确。经排查发现elasticsearch在做时区聚合时,自身不是东八区时间(中国时间),需要offset属性减去8小时。
解决办法
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
DateHistogramAggregationBuilder aggregationBuilder = AggregationBuilders
.dateHistogram("dateDownStreamRequestTime")
.field("downStreamRequestTime")
.calendarInterval(DateHistogramInterval.HOUR)
.offset("-8h")
.minDocCount(0)
.order(BucketOrder.aggregation("_key", true));
sourceBuilder.aggregation(aggregationBuilder);