使用 Sum 的 Elasticsearch 日期范围聚合

Elasticsearch Date Range Aggregation with Sum

我已关注 Elastic's docs 并成功查询了两个日期范围内 return 数据的索引。

我做不对的是在每个范围内添加单位总和。我已经设法添加了一个单位总和(请参阅下面的查询),但这只是 return 整个范围的总和。

我想要实现的是 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"
                     }
                  }
               }
            }
         }
      }
   }
}

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

你就快完成了,你只需要在 range 聚合中移动(或复制)你的 unit_sum,就像这样:

{
  "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"
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}