【发布时间】:2019-04-29 21:45:23
【问题描述】:
我正在尝试对以下文档进行聚合
{
"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
}
]
}
这里需要做的分析是:
- 过滤所有文档的 mid 或/和 cid
- 过去 7 天的 data.date 过滤范围和每个 pid 在该范围内的 data.vol 总和
- 按照上一步获得的总和对文档进行降序排序
- 按 pid 对这些结果进行分组。
这意味着我们试图在特定 cid/mid 的日期范围内按总销量(售出数量)获得顶级产品。
这里的PID是指产品ID, MID这里指的是商家ID, CID在这里指的是类别ID
【问题讨论】:
-
您能否也显示您的映射(即
data是nested类型)? -
数据字段应该映射为嵌套类型。然后,您可以创建 bool 查询来过滤 mid 和 cid,并有一个嵌套查询来过滤 data.date 字段。最后你需要 pid 上的术语聚合
-
{ "mappings": {"_doc": {"properties": {"pid": {"type": "integer"}, "mid": {"type": "integer"}, "cid": {"type": "integer"}, "bid": {"type": "integer"}, "gmv": {"type": "integer"}, "vol": {"type": "integer"}, "data": {"properties": {"date": {"type": "date", "format": "yyyy-MM-dd"}, "gmv": {"type": "integer"}, "vol": {"type": "integer"} } } } } } }
标签: elasticsearch elasticsearch-aggregation elasticsearch-query