我试图对以下文档进行聚合
{
"pid": 900000,
"mid": 9000,
"cid": 90,
"bid": 1000,
"gmv": 1000000,
"vol": 200,
"data": [
{
"date": "25-11-2018",
"gmv": 100000,
"vol": 20
},
{
"date": "24-11-2018",
"gmv": 100000,
"vol": 20
},
{
"date": "23-11-2018",
"gmv": 100000,
"vol": 20
}
]
}这里需要做的分析是:
这意味着,我们正在试图获得最高的产品的数量(数量)的总和,在一个日期范围内,具体的cid/mid。
PID指产品ID,中间指商家ID,CID指的是类别ID。
发布于 2018-11-28 08:11:48
首先,需要更改映射以在嵌套字段上运行查询。将字段“data”的类型更改为“嵌套”。
然后,可以使用筛选器中的范围查询和mid/cid上的术语筛选器对数据进行筛选。一旦得到正确的数据集,就可以在pid上按照vol之和的子聚合进行聚合。
以下是以下查询。
{
"query": {
"bool": {
"filter": [
{
"bool": {
"must": [
{
"range": {
"data.date": {
"gte": "28-11-2018",
"lte": "25-11-2018"
}
}
},
{
"must": [
{
"terms": {
"mid": [
"9000"
]
}
}
]
}
]
}
}
]
}
},
"aggs": {
"AGG_PID": {
"terms": {
"field": "pid",
"size": 0,
"order": {
"TOTAL_SUM": "desc"
},
"min_doc_count": 1
},
"aggs": {
"TOTAL_SUM": {
"sum": {
"field": "data.vol"
}
}
}
}
}
}您可以相应地修改查询。希望这会有帮助。
发布于 2018-11-28 18:28:33
请查找嵌套聚合查询,该查询按"vol“对每一桶"pid”进行排序。可以在查询部件中添加任意数量的筛选器。
{ "size": 0, "query": { "bool": { "must": [ { "term": { "mid": "2" } } ] } }, "aggs": { "top_products_sorted_by_order_volume": { "terms": { "field": "pid", "order": { "nested_data_object>order_volume_by_range>order_volume_sum": "desc" } }, "aggs": { "nested_data_object": { "nested": { "path": "data" }, "aggs": { "order_volume_by_range": { "filter": { "range": { "data.date": { "gte": "2018-11-26", "lte": "2018-11-27" } } }, "aggs": { "order_volume_sum": { "sum": { "field": "data.ord_vol" } } } } } } } } } }
https://stackoverflow.com/questions/53511748
复制相似问题