Elasearch时间查询及分组统计

  /* *   *大敌;从ES中查询数据   ,* ES的时间如果不设置的话,默认是UTC时间,与北京时间相差8个小时,在查询统计的时候,如果不做统计的话,数据肯定是不准确的。   ,*,ES版本:6.4.1。使用的javaApi是,Elasearch  High  Level  Rest  Client6.4   ,* @param  monthDate (彭定康yyyy-MM):   ,* @return  List< SysCountResultVo>,统计结果。   ,*/public  List< SysCountResultVo>, queryOrderCountDataFromEs (String  monthDate), {   ,,,try  {   ,,,,,,,/* *   ,,,,,,,,*,条件查询(时间范围)   ,,,,,,,*/,,,,,,,String  startTime =, DateUtil.getMonthFirstDay (DateUtil.dateStr2Date(时间+ monthDate “-01“,, DateUtil.PATTERN_DTSHORTLINE));   ,,,,,,,String  endTime =, DateUtil.getMonthLastDay (DateUtil.dateStr2Date(时间+ monthDate “-01“,, DateUtil.PATTERN_DTSHORTLINE));   ,,,,,,,Date  s =, DateUtil.dateStr2Date(时间+ startTime “, 00:00:00",, DateUtil.PATTERN_SIMPLE);   ,,,,,,,Date  e =, DateUtil.dateStr2Date(时间+ endTime “, 23:59:59",, DateUtil.PATTERN_SIMPLE);   ,,,,,,,SearchSourceBuilder  SearchSourceBuilder =, new  SearchSourceBuilder ();   ,,,,,,,BoolQueryBuilder  boolQuery =, QueryBuilders.boolQuery ();   ,,,,,,,boolQuery.must (QueryBuilders.rangeQuery (“order_time") .gte (s) .lte (e));   ,,,,,,,searchSourceBuilder.query (boolQuery);   ,,,,,,,/* *   ,,,,,,,,*,分组聚合   ,,,,,,,*/,,,,,,,TermsAggregationBuilder  aggregationBuilder =, AggregationBuilders.terms (“orderStatusCount") .field (“order_status");   ,,,,,,,aggregationBuilder.size (ESConstants.ES_AGG_SIZE);   ,,,,,,,aggregationBuilder.collectMode (Aggregator.SubAggCollectionMode.BREADTH_FIRST);   ,,,,,,,DateHistogramAggregationBuilder  field =, AggregationBuilders.dateHistogram (“orderTime") .field (“order_time");   ,,,,,,/*   ,,,,,,,,*时间统计的时候,注意时差问题。统计的时候,设置时区即可,不需要设置偏移量。   ,,,,,,,,*抵消偏移量这个参数,在某些时刻也是有用的,它可以自己定义一天的开始,比如设置从第一天的3点到第二天的3点为一天,默认都是从0点开始0点结束算做一天的   ,,,,,,,*/,,,,,,,field.dateHistogramInterval (DateHistogramInterval.DAY) .timeZone (DateTimeZone.getDefault ());//.offset (“+ 8 h");   ,,,,,,,aggregationBuilder.subAggregation(领域);   ,,,,,,,searchSourceBuilder.aggregation (aggregationBuilder);   ,,,,,,,SearchResponse  response =, client.searchDocument (ESConstants.ES_EC_ORDER_INDEX, ESConstants.ES_EC_ORDER_TYPE,, searchSourceBuilder);   ,,,,,,,//结果处理   ,,,,,,,Terms  byPath =, response.getAggregations () . get (“orderStatusCount");   ,,,,,,,List<?, extends  Terms.Bucket>, buckets =, byPath.getBuckets ();   ,,,,,,,List, resultVos =, new  ArrayList<在();   ,,,,,,,for  (Terms.Bucket  bucket :桶),{   ,,,,,,,,,,,Histogram  agg =, bucket.getAggregations () . get (“orderTime");   ,,,,,,,,,,,for  (Histogram.Bucket  entry : agg.getBuckets ()), {   ,,,,,,,,,,,,,,,SysCountResultVo  sysCountVo =, new  SysCountResultVo ();   ,,,,,,,,,,,,,,,sysCountVo.setLocalPath (bucket.getKeyAsString ());   ,,,,,,,,,,,,,,,long  t =, ((DateTime) entry.getKey ()) .getMillis ();   null   null   null   null   null   null   null   null   null   null   null   null   null   null

Elasearch时间查询及分组统计