我每年进行一次嵌套聚合,然后每年在Elasticsearch中进行每周一次嵌套聚合。years年有53周,但是ElasticSearch的结果给出的是year年的最后一周key =“ 1”而不是“ 53”。如何让ElasticSearch在上周返回53而不是1?
这是我的查询:
GET _search { "size": 0, "aggs": { "activities_per_year": { "date_histogram": { "field": "start", "interval": "1y", "format": "yyyy" }, "aggs": { "activities_per_week": { "date_histogram": { "field": "start", "interval": "week", "format": "w" } } } } } }
结果(删除的数据在中间):
"key_as_string": "2008", "key": 1199145600000, "doc_count": 872, "activities_per_week": { "buckets": [ { "key_as_string": "1", "key": 1199059200000, "doc_count": 6 }, { "key_as_string": "2", "key": 1199664000000, "doc_count": 5 }, { "key_as_string": "3", "key": 1200268800000, "doc_count": 15 }, { "key_as_string": "51", "key": 1229299200000, "doc_count": 18 }, { "key_as_string": "52", "key": 1229904000000, "doc_count": 7 }, { "key_as_string": "1", "key": 1230508800000, "doc_count": 1 } ]
2008年是a年,最后一个星期有“ key_as_string”:“ 1”。我希望它是53,所以可以将其添加到字典中:)我该怎么做?
另外,elasticsearch会返回两周的“ key_as_string”:“ 1”表示2013年,我认为2013年不是a年吗?
这有一些细微的陷阱,您需要意识到。首先,Elasticsearch使用Joda Time API来处理与日期时间相关的内容。
其次,来看看这个的“周”究竟是怎样的解释:
以星期为基础的年份是将日期表示为星期几,星期数和年份(以星期为基础)的一年。以下描述是此库中此方法的实现所使用的ISO8601标准。 每周从1到52-53。将一周的第一天定义为星期一,并赋予其值1。 一年的第一周定义为一年中至少有四天的第一周。由于此定义,第1周可能会延续到上一年,而第52/53周可能会延续到下一年。因此,需要周年字段。 例如,2003-01-01是星期三。这意味着2003年是该周的五天,从周三到周日。因此,整周被认为是2003年的第一周。由于所有周从星期一开始,因此2003年的第一周从2002年12月30日开始,即。在2002年。 基于星期的年份具有特定的文本格式。2002-12-30(2002年12月30日星期一)将表示为2003-W01-1。2003-01-01(2003年1月1日,星期三)将表示为2003-W01-3。
以星期为基础的年份是将日期表示为星期几,星期数和年份(以星期为基础)的一年。以下描述是此库中此方法的实现所使用的ISO8601标准。
每周从1到52-53。将一周的第一天定义为星期一,并赋予其值1。
一年的第一周定义为一年中至少有四天的第一周。由于此定义,第1周可能会延续到上一年,而第52/53周可能会延续到下一年。因此,需要周年字段。
例如,2003-01-01是星期三。这意味着2003年是该周的五天,从周三到周日。因此,整周被认为是2003年的第一周。由于所有周从星期一开始,因此2003年的第一周从2002年12月30日开始,即。在2002年。
基于星期的年份具有特定的文本格式。2002-12-30(2002年12月30日星期一)将表示为2003-W01-1。2003-01-01(2003年1月1日,星期三)将表示为2003-W01-3。
因此,在您的情况下,您会看到2008年12月29日属于第一周,因为2008年12月29日所在的一周是2008年的三天和2009年的四天。根据上述规则,这是从2009年。这与leap年无关。举一个例子,尝试索引31-12-2009和31-12-2015。两者都会给您第53周的时间,而且它们都不是leap年。
为了更好地了解这些内容,我建议您采用以下格式进行汇总"format": "x-w---yyyy-MM-dd":
"format": "x-w---yyyy-MM-dd"
{ "size": 0, "aggs": { "activities_per_year": { "date_histogram": { "field": "start", "interval": "1y", "format": "yyyy" }, "aggs": { "activities_per_week": { "date_histogram": { "field": "start", "interval": "week", "format": "x-w---yyyy-MM-dd" } } } } } }