我正在尝试对以下文档进行汇总
{
"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 /中位数的日期范围内的销量(销售数量)的总和来获得顶级产品。
此处的PID是指产品ID, MID是指商家ID, CID是指此处的类别ID
答案 0 :(得分:1)
首先,您需要更改映射以对嵌套字段运行查询。
将字段“ 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"
}
}
}
}
}
}
您可以相应地修改查询。希望这会有所帮助。
答案 1 :(得分:0)
请找到嵌套的聚合查询,该查询按“ 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"
}
}
}
}
}
}
}
}
}
}