Elasticsearch日期范围聚合与总和

时间:2015-06-03 11:23:50

标签: kibana elasticsearch

我已跟踪Elastic's docs并成功查询我的索引以返回两个日期范围的数据。

我能做些什么,是为每个范围添加一个单位的总和。我设法添加了单位金额(请参阅下面的查询),但这只返回整个范围的总和。

我想要实现的是A期与B期的比较。即本周您上周已售出X单位与Y单位,因此%差异为Z.

{  
   "query":{  
      "filtered":{  
         "query":{  
            "query_string":{  
               "query":"*",
               "analyze_wildcard":true
            }
         }
      }
   },
   "size":0,
   "aggs":{  
      "vendor_type":{  
         "terms":{  
            "field":"vendor_type",
            "size":5
         },
         "aggs":{  
            "product_type":{  
               "terms":{  
                  "field":"product_type",
                  "size":5,
                  "order":{  
                     "unit_sum":"desc"
                  }
               },
               "aggs":{  
                  "range":{  
                     "date_range":{  
                        "field":"date",
                        "format":"MM-yyy",
                        "ranges":[  
                           {  
                              "to":"now-1M/M"
                           },
                           {  
                              "from":"now-1M/M"
                           }
                        ]
                     }
                  },
                  "unit_sum":{  
                     "sum":{  
                        "field":"units"
                     }
                  }
               }
            }
         }
      }
   }
}

有人可以帮忙吗?提前谢谢。

1 个答案:

答案 0 :(得分:1)

您几乎就在那里,您只需要移动(或复制)unit_sum聚合内的range,如下所示:

{
  "query": {
    "filtered": {
      "query": {
        "query_string": {
          "query": "*",
          "analyze_wildcard": true
        }
      }
    }
  },
  "size": 0,
  "aggs": {
    "vendor_type": {
      "terms": {
        "field": "vendor_type",
        "size": 5
      },
      "aggs": {
        "product_type": {
          "terms": {
            "field": "product_type",
            "size": 5
          },
          "aggs": {
            "range": {
              "date_range": {
                "field": "date",
                "format": "MM-yyy",
                "ranges": [
                  {
                    "to": "now-1M/M"
                  },
                  {
                    "from": "now-1M/M"
                  }
                ]
              },
              "aggs": {
                "unit_sum": {
                  "sum": {
                    "field": "units"
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}