使用Elasticsearch中的date_histogram聚合计算嵌套字段的总和

时间:2014-05-28 16:46:43

标签: elasticsearch

我无法使用date_histogram在Elasticsearch中获取嵌套字段的总和,我希望有人可以帮我一把。

我的映射看起来像这样:

"client" : {
  // various irrelevant stuff here...

  "associated_transactions" : {
    "type" : "nested",
    "include_in_parent" : true,
    "properties" : {
      "amount" : {
        "type" : "double"
      },
      "effective_at" : {
        "type" : "date",
        "format" : "dateOptionalTime"
      }
    }
  }
}

我正在尝试获得一个date_histogram,显示所有客户的按月收入总额 - 即。显示由associated_transactions.effective_date确定的直方图中的和associated_transactions.amount的时间序列。我尝试运行此查询:

{
  "query": {
    // ...
  },
  "aggregations": {
    "revenue": {
      "date_histogram": {
        "interval": "month",
        "min_doc_count": 0,
        "field": "associated_transactions.effective_at"
      },
      "aggs": {
        "monthly_revenue": {
          "sum": {
            "field": "associated_transactions.amount"
          }
        }
      }
    }
  }
}

但它给我的总和是不对的。似乎ES正在做的是找到在给定月份内有任何交易的所有客户,然后为这些客户总结所有交易(从任何时间)。也就是说,它是在给定月份内进行购买的客户的生命周期中花费的金额之和,而不是给定月份中的购买总额。

有没有办法获取我正在寻找的数据,或者这是ES如何处理嵌套字段的限制?

非常感谢您的帮助!

大卫

1 个答案:

答案 0 :(得分:2)

试试这个?

{
  "query": {
    // ...
  },
  "aggregations": {
    "revenue": {
      "date_histogram": {
        "interval": "month",
        "min_doc_count": 0,
        "field": "associated_transactions.effective_at"

        "aggs": {
          "monthly_revenue": {
            "sum": {
              "field": "associated_transactions.amount"
            }
          }
        }
      }
    }
  }
}

即。将“aggs”键移动到“date_histogram”字段中。