Date_histogram聚合返回错误结果

时间:2017-02-24 13:58:00

标签: elasticsearch

我必须创建聚合,计算包含日期范围的文档数。 我的查询如下:

{  
   "query":{  
      "range":{  
         "doc.createdTime":{  
            "gte":1483228800000,
            "lte":1485907199999
         }
      }
   },
   "size":0,
   "aggs":{  
      "by_day":{  
         "histogram":{  
            "field":"doc.createdTime",
            "interval":"604800000ms",
            "format":"yyyy-MM-dd'T'HH:mm:ssZZ",
            "min_doc_count":0,
            "extended_bounds":{  
               "min":1483228800000,
               "max":1485907199999
            }
         }
      }
   }
}

时间间隔:604800000等于7天。

结果,我重温了这些:

"aggregations": {
    "by_day": {
      "buckets": [
        {
          "key_as_string": "2016-12-29T00:00:00+00:00",
          "key": 1482969600000,
          "doc_count": 0
        },
        {
          "key_as_string": "2017-01-05T00:00:00+00:00",
          "key": 1483574400000,
          "doc_count": 603
        },
        {
          "key_as_string": "2017-01-12T00:00:00+00:00",
          "key": 1484179200000,
          "doc_count": 3414
        },
        {
          "key_as_string": "2017-01-19T00:00:00+00:00",
          "key": 1484784000000,
          "doc_count": 71551
        },
        {
          "key_as_string": "2017-01-26T00:00:00+00:00",
          "key": 1485388800000,
          "doc_count": 105652
        }
      ]
    }
  }

您可以指示我的水桶从 2016年12月29日开始,但作为范围查询不包括此日期。我希望我的桶应该从 01/01/2017 开始,正如我在范围查询中指出的那样。此问题仅发生在查询中,间隔的天数大于1.如果有任何其他间隔,则可以正常工作。我已经尝试了一天,几个月和几个小时,它运行正常。 我也试过使用过滤的aggs,然后才使用date_histogram。结果是一样的。 我使用的是Elasticsearch 2.2.0版本。

问题是如何强制date_histogram从我需要的日期开始?

1 个答案:

答案 0 :(得分:3)

尝试使用从给定公式计算的值添加偏移参数:

  

value = start_date_in_ms%week_in_ms = 1483228800000%604800000 =   259200000

...
val sparkConf = new SparkConf().setAppName("spark-job")
  .set("spark.default.parallelism", (CPU * 3).toString)
  .set("spark.serializer", "org.apache.spark.serializer.KryoSerializer")
  .registerKryoClasses(Array(classOf[Member], classOf[GraphVertex], classOf[GraphEdge]))
  .set("spark.dynamicAllocation.enabled", "true")


implicit val sparkSession = SparkSession.builder().config(sparkConf).getOrCreate()

sparkSession.sparkContext.setCheckpointDir("s3://spark-jobs/checkpoint")
....