[英]ElasticSearch extended_bounds over range with no data/hitdocs
[英]ElasticSearch extended_bounds min max
我使用elasticsearch aggregations
返回两个不同的聚合组,一个用于当前周,另一个用于前一周,我的当前周聚合如下所示:
"aggregations": {
"current": {
"date_histogram": {
"field": "date",
"interval": "1d",
"min_doc_count": 0,
"extended_bounds": {
"min": new Date().setDate(new Date().getDate() - 7),
"max": new Date().getDate()
}
}
}
}
在这一点上一切都很好,我将min_doc_count
与extended_bounds
结合使用以填补空存储桶的空缺(如果有的话)。
在其他方面,我几乎以相同的方式重复此过程,但是我希望我的存储桶处于上一时期!
我知道extended_bounds
不会过滤存储区,因此我想在我的聚合之上添加一个过滤器,如下所示:
"aggregations": {
filtered: {
"filter" : {
"bool": {
"must": [{
"range" : {
date: {
from: new Date().setDate(new Date().getDate() - 14),
to: new Date().setDate(new Date().getDate() - 7)
}
}
}]
}
},
},
"previous": {
"date_histogram": {
"field": "date",
"interval": "1d",
"min_doc_count": 0,
"extended_bounds": {
"min": new Date().setDate(new Date().getDate() - 14),
"max": new Date().setDate(new Date().getDate() - 7)
}
}
}
}
第二个聚合应该回到过去,恰好是14天,直到7天之前。 我知道min
有效,但max
无效,即使Im使用过滤器来限制范围,返回的存储桶仍会持续到今天,Im must
在此处使用,但似乎什么也没做。 我对ES非常陌生,也许我在这里缺少一些明显的东西,请原谅我缺乏知识。
根据文档 :
请注意(顾名思义)extended_bounds不会过滤存储桶。 这意味着,如果extended_bounds.min高于从文档中提取的值,则文档仍将指示第一个存储桶是什么(extended_bounds.max和最后一个存储桶也是如此)。 对于过滤桶,应将直方图聚合嵌套在具有适当的“自/至”设置的范围过滤器聚合下。
例:
{
"query" : {
"filtered" : { "filter": { "range" : { "price" : { "to" : "500" } } } }
},
"aggs" : {
"prices" : {
"histogram" : {
"field" : "price",
"interval" : 50,
"min_doc_count" : 0,
"extended_bounds" : {
"min" : 0,
"max" : 500
}
}
}
}
}
长话短说:使用查询过滤器,或将直方图聚合嵌套在过滤器聚合中。 在您的示例中,您不是嵌套聚合,而是并排使用它们(因此直方图agg不会被filter-agg过滤)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.