版本
使用Elasticsearch 1.7.2
目标
我想创建一个图表,显示过去n
天内用户每天所做的预测次数。在这种情况下,10天。
当前查询
{
"size": 0,
"aggs": {
"predictions": {
"nested": {
"path": "user_answers"
},
"aggs": {
"predictions_over_time": {
"date_histogram": {
"field": "user_answers.created",
"interval": "day",
"format": "yyyy-MM-dd",
"min_doc_count": 0
}
}
}
}
}
}
问题
此查询将返回直方图,但会返回所有文档中所有可用日期的存储桶。它并不限制在特定的日期范围内。
我尝试了什么?
我已经尝试了很多方法来解决这个问题,所有方法都失败了。
*范围过滤,然后直方图
*日期范围聚合,然后直方图桶
*使用extended_bounds
,完整日期,now-10d
以及时间戳
*在直方图聚合中尝试范围过滤器
任何指导将不胜感激!感谢。
答案 0 :(得分:7)
query
对我不起作用,我使用的是第三种aggs:
{
"size": 0,
"aggs": {
"user_answers": {
"nested": { "path": "user_answers" },
"aggs": {
"timed_user_answers": {
"filter": {
"range": {
"user_answers.created": {
"gte": "now",
"lte": "now -10d"
}
}
},
"aggs": {
"predictions_over_time": {
"date_histogram": {
"field": "user_answers.created",
"interval": "day",
"format": "yyyy-MM-dd",
"min_doc_count": 0
}
}
}
}
}
}
}
}
一个aggs
指定nested
,一个指定filter
,最后一个指定实际聚合。不知道为什么这种语法有意义,但你似乎无法在同一aggs
上使用两种语法。
答案 1 :(得分:-1)
您需要添加查询。查询可以是除post_filter之外的任何内容。它应该是嵌套的并包含日期范围。其中一种方法是定义常量分数查询。在常量分数查询中,使用嵌套过滤器,该过滤器应使用范围过滤器。
{
"query": {
"constant_score": {
"filter": {
"nested": {
"path": "user_answers",
"filter": {
"range": {
"user_answers.created": {
"gte": "now",
"lte": "now -10d"
}
}
}
}
}
}
}
}
确认这是否适合您。