这是一个奇怪的问题,但我试图避免两次调用ES来从两次不同的时间获取不同的数据。我们可以这么说:
从"2016-10-01到2016-10-31“,我想把字段"orders.total_sales”(只是一个例子)和另一个总和"reviews.count“相加。
从"2016-09-01到2016-09-30“,我只想把"orders.total_sales”和起来。
(事实上,我需要第一个区间的50和总和),但对于第二个范围,我只需要2)。
我知道它可以过滤两个范围内的任何使用应该而不是必须。但是,是否有可能将结果与每个范围区分开来,以便与它们一起操作(汇总和)。
我认为这是不可能的,但以防万一以前有人提出过这个问题。
提前谢谢。
发布于 2016-11-04 20:18:35
最后我写了这样的东西(由于ES错误,直到我开始工作)。
非常感谢!它起作用了,但不适用于过滤器,但我的想法是一样的,我做了这样的事情:
{
"timeout" : 1500,
"query" : {
"bool" : {
"must" : [
{
"term" : {
"businessId" : "101598"
}
} ,
{
"range" : {
"date" : {
"from" : "2016-10-15T03:00:00.000Z",
"to" : "2016-10-31T03:00:00.000Z",
"include_lower" : true,
"include_upper" : true
}
}
}]
}
},
"aggs": {
"range_one": {
"date_range": {
"field": "date",
"ranges": [
{
"from": "2016-10-15T03:00:00.000Z",
"to": "2016-10-22T03:00:00.000Z"
}
]
},
"aggs": {
"sum_orders_sales": {
"sum": {
"field": "orders.totalSales"
}
}
}
},
"range_two": {
"date_range": {
"field": "date",
"ranges": [
{
"from": "2016-10-23T03:00:00.000Z",
"to": "2016-10-31T03:00:00.000Z"
}
]
},
"aggs": {
"sum_orders_count": {
"sum": {
"field": "orders.orderCount"
}
}
}
}
}
}在我的情况下,性能和速度很重要,而且由于我的两个范围是连续的,所以我认为我可以通过business_id (我需要)过滤,从最老的日期(第一个范围的开始日期)到最新的日期(第二个范围的结束日期),假设聚合与查询的结果一起工作(否则,它将搜索所有文档,如果只对一个结果集执行聚合操作,那么就好了)。但我是新来的,所以不确定我看得对不对。然而,它的工作就像魅力!谢谢lot1
https://stackoverflow.com/questions/40427594
复制相似问题