我的数据集中有1000个日期,跨越1个月。我想根据这个日期字段进行聚合,但只按照间隔(比如一周)的几个样本进行聚合。
例如:对于1分至30分钟的日期,我应该获得日期:1月12日,8月12日,15日结束,22日结束时29月12日 PS:我不想在这里使用日期直方图,因为它分组数据到给定的间隔。因此,对于上面的例子,它形成了1-7,8-15之类的桶等等。
我查看了 sampler 聚合,它需要提供一个脚本。我无法弄清楚如何编写脚本以获取样本并将这些样本提供给子聚合。
答案 0 :(得分:0)
有不同的方法可以做到这一点。其中之一是使用由过滤器约束的date_histogram
聚合,该过滤器仅选择所需的日期:
{
"aggs": {
"5_days": {
"filter": {
"filter": {
"bool": {
"minimum_should_match": 1,
"should": [
{
"range": {
"date": {
"from": "2016-12-01T00:00:00.000Z",
"to": "2016-12-02T00:00:00.000Z"
}
}
},
{
"range": {
"date": {
"from": "2016-12-08T00:00:00.000Z",
"to": "2016-12-09T00:00:00.000Z"
}
}
},
{
"range": {
"date": {
"from": "2016-12-15T00:00:00.000Z",
"to": "2016-12-16T00:00:00.000Z"
}
}
},
{
"range": {
"date": {
"from": "2016-12-22T00:00:00.000Z",
"to": "2016-12-23T00:00:00.000Z"
}
}
},
{
"range": {
"date": {
"from": "2016-12-29T00:00:00.000Z",
"to": "2016-12-30T00:00:00.000Z"
}
}
}
]
}
}
},
"aggs": {
"samples": {
"date_histogram": {
"field": "date",
"interval": "day"
}
}
}
}
}
}
第二种方式更简洁,归结为只使用选定日期的date_range
aggregation:
{
"aggs": {
"range": {
"date_range": {
"field": "date",
"ranges": [
{ "from": "2016-12-01T00:00:00.000Z", "to": "2016-12-02T00:00:00.000Z" },
{ "from": "2016-12-08T00:00:00.000Z", "to": "2016-12-09T00:00:00.000Z" },
{ "from": "2016-12-15T00:00:00.000Z", "to": "2016-12-16T00:00:00.000Z" },
{ "from": "2016-12-22T00:00:00.000Z", "to": "2016-12-23T00:00:00.000Z" },
{ "from": "2016-12-29T00:00:00.000Z", "to": "2016-12-30T00:00:00.000Z" }
]
}
}
}
}