ElasticSearch extended_bounds最小值最大值
问题描述:
即时通讯使用elasticsearch aggregations
返回两个不同的集合组,一个用于当前一周和前一周,我现在每周汇总如下:ElasticSearch extended_bounds最小值最大值
"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
没有,直到今天,即使林使用过滤器来限制范围, 即时使用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过滤)。
谢谢,我一定会考虑将它们嵌套在一个过滤器中,现在我在两个查询中运行两个查询,可能不是最有效的方法... – bmaggi 2014-11-02 22:35:03