es现在有一个父文档user_tag,user_tag的子文档是order,order里面包含:用户cusId,订单日期orderDate,消费金额amount1 这三个字段, 现在需要写出2023-05-01到2023-05-06之间,消费总金额大于100的用户
时间: 2024-03-28 17:41:57 浏览: 86
您可以使用Elasticsearch的聚合功能来实现此目的。具体步骤如下:
1. 创建一个bool查询,用于限制日期范围和筛选消费金额大于100。
```json
{
"query": {
"bool": {
"must": [
{
"range": {
"order.orderDate": {
"gte": "2023-05-01",
"lte": "2023-05-06"
}
}
},
{
"range": {
"order.amount1": {
"gt": 100
}
}
}
]
}
}
}
```
2. 使用terms聚合对用户进行分组,并且在每个分组上计算总消费金额。同时,使用bucket_selector筛选出消费总金额大于100的用户。
```json
{
"aggs": {
"users": {
"terms": {
"field": "user_tag.cusId"
},
"aggs": {
"total_amount": {
"sum": {
"field": "user_tag.order.amount1"
}
},
"filter_amount": {
"bucket_selector": {
"buckets_path": {
"totalAmount": "total_amount"
},
"script": "params.totalAmount > 100"
}
}
}
}
}
}
```
3. 最终查询结果将返回2023-05-01到2023-05-06之间,消费总金额大于100的用户列表,以及每个用户的消费总金额。
```json
{
"took": 10,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 0,
"max_score": 0,
"hits": []
},
"aggregations": {
"users": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": "user1",
"doc_count": 2,
"total_amount": {
"value": 120
}
},
{
"key": "user2",
"doc_count": 1,
"total_amount": {
"value": 150
}
}
]
}
}
}
```
请注意,以上查询仅供参考,您需要根据具体的数据结构和查询需求进行调整。
阅读全文