Elasticsearch Aggregation:每个父母最新孩子的总和

时间:2016-12-08 21:21:31

标签: elasticsearch elasticsearch-aggregation elasticsearch-dsl elasticsearch-query elasticsearch-5

在Elasticsearch中有一个父子结构代表一个orderorder_revision个孩子,我想生成price的直方图,显示quantity的总和。 / p>

{
  "_type": "order",
  "_id": "1063220887",
  "_score": 1,
  "_source": {
    "order_id": "1063220887",
    "product_id": "10446350",
    "timestamp": 1462713302000
  }
}

{
  "_type": "order_revision",
  "_id": "10234234",
  "_parent": "1063220887",
  "_source": {
    "price": 9,
    "quantity": 3,
    "revision": 361,
    "timestamp": 1462712196000
  }
}

以下聚合基本上有效但返回所有现有修订的总和。

  {
    "aggs": {
      "orders": {
        "filter": {
          "has_parent": {
            "parent_type": "order"
          }
        },
        "aggs": {
          "quantity_per_price": {
            "histogram": {
              "field": "price",
              "interval": 1
            }
            "aggs": {
              "sum": {"field": quantity"}
            }
          }
        }
      }
    }
  }

在最终版本中,它应仅返回每个订单的最新版本(最高/最新quantity)的timestamp字段的总和。 我不完全确定如何提出这样的聚合,按order_id进行分组,只选择最新的子,我不确定这种父子结构是否最适合对这些数据进行建模。 / p>

1 个答案:

答案 0 :(得分:0)

最简单的实现是在文档中标记最新版本("latest": true)。然后,添加查询或filter聚合以仅过滤最新修订版就成了一个简单的问题。