Elasticsearch 聚合:每个 parent 的最新子项总和
Elasticsearch Aggregation: Sum of latest childrens per parent
在 Elasticsearch 中有一个 parent-children 结构,表示 order
和 order_revision
children 我想生成 price
的直方图,显示总和quantity
.
{
"_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
}
}
以下聚合基本上有效,但 return 是所有现有修订的总和。
{
"aggs": {
"orders": {
"filter": {
"has_parent": {
"parent_type": "order"
}
},
"aggs": {
"quantity_per_price": {
"histogram": {
"field": "price",
"interval": 1
}
"aggs": {
"sum": {"field": quantity"}
}
}
}
}
}
}
在最终版本中,它应该只 return 最新 修订版的 quantity
字段的总和(highest/newest timestamp
) 每个订单。
我不完全确定如何提出这样一个按 order_id
分组并只选择最新的 child 的聚合,我也不确定这个 parent-child 结构是否最好对此数据建模。
最简单的实施方式是在文档中标记最新修订 ("latest": true
)。然后,添加查询或 filter
聚合以仅过滤最新修订版就变成了一个简单的问题。
在 Elasticsearch 中有一个 parent-children 结构,表示 order
和 order_revision
children 我想生成 price
的直方图,显示总和quantity
.
{
"_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
}
}
以下聚合基本上有效,但 return 是所有现有修订的总和。
{
"aggs": {
"orders": {
"filter": {
"has_parent": {
"parent_type": "order"
}
},
"aggs": {
"quantity_per_price": {
"histogram": {
"field": "price",
"interval": 1
}
"aggs": {
"sum": {"field": quantity"}
}
}
}
}
}
}
在最终版本中,它应该只 return 最新 修订版的 quantity
字段的总和(highest/newest timestamp
) 每个订单。
我不完全确定如何提出这样一个按 order_id
分组并只选择最新的 child 的聚合,我也不确定这个 parent-child 结构是否最好对此数据建模。
最简单的实施方式是在文档中标记最新修订 ("latest": true
)。然后,添加查询或 filter
聚合以仅过滤最新修订版就变成了一个简单的问题。