es里父子文档,对子文档聚合,得到总金额totalAmt,然后获取totalAmt大于100的用户,写出对应的dsl语句
时间: 2024-03-28 16:41:53 浏览: 79
好的,针对您的问题,可以使用以下的 DSL 语句进行查询:
```
{
"query": {
"has_parent": {
"type": "parent_type",
"query": {
"bool": {
"must": [
{
"has_child": {
"type": "child_type",
"query": {
"match_all": {}
}
}
}
]
}
}
}
},
"aggs": {
"total_amt": {
"sum": {
"field": "amt"
}
},
"users": {
"terms": {
"field": "user",
"size": 10
},
"aggs": {
"total": {
"sum": {
"field": "amt"
}
}
}
}
},
"post_filter": {
"range": {
"total_amt": {
"gte": 100
}
}
}
}
```
其中,`has_parent` 查询用于查找父文档类型为 `parent_type` 的文档,然后使用 `has_child` 查询对子文档类型为 `child_type` 的文档进行聚合。使用 `sum` 聚合操作对 `amt` 字段进行求和,得到总金额 `total_amt`。在 `users` 聚合操作中,使用 `terms` 聚合对 `user` 字段进行分组,并在每个分组中使用 `sum` 聚合操作对 `amt` 字段进行求和,得到每个用户的总金额。在 `post_filter` 中使用 `range` 过滤器对 `total_amt` 字段的值进行过滤,只保留总金额大于等于 100 的结果。
阅读全文