【发布时间】:2020-12-21 10:25:46
【问题描述】:
我有一个类似下面的场景:
包含商店购买商品的索引,其中每个商品都有一个 order_id。 而且我需要按每个订单的最后一个项的颜色进行分组。
数据结构:
{
"order_id": 1,
"product_id":235233
"color": "Blue",
"purchase_date": "2020-08-21T05:53:43.362Z"
},
{
"order_id": 1,
"product_id":2352662
"color": "Black",
"purchase_date": "2020-08-23T05:53:43.362Z"
},
{
"order_id": 2,
"product_id":855477
"color": "Blue",
"purchase_date": "2020-08-22T05:53:43.362Z"
},
{
"order_id": 2,
"product_id":322352
"color": "Red",
"purchase_date": "2020-08-24T05:53:43.362Z"
},
{
"order_id": 3,
"product_id":3225235
"color": "Red",
"purchase_date": "2020-08-25T05:53:43.362Z"
}
预期结果
黑色:1(order_id 1 的最后一个产品的颜色)
Red:2(order_id 2, 3 最后产品的颜色)
基于this answer,我可以将每个订单的最后一件商品作为整个商品,但我正在寻找的是直接获取每种颜色的商品数量
POST /items/_search?search_type=count
{
"aggs": {
"group": {
"terms": {
"field": "order_id"
},
"aggs": {
"group_items": {
"top_hits": {
"size": 1,
"sort": [
{
"purchase_date": {
"order": "desc"
}
}
]
}
}
}
}
}
}
以下内容为我提供了所有订单商品的每种颜色的商品数量,而不仅仅是每个订单的最后一个。
GET /items/_search?search_type=count
{
"size":0,
"aggs": {
"colors": {
"terms": {
"field": "color.keyword"
}
}
}
}
【问题讨论】:
-
@ESCoder 谢谢,希望现在清楚
标签: elasticsearch elasticsearch-aggregation elasticsearch-query