问题描述:
某张记录用户用量信息的表(“id”, “rid”, “userName”, “userNo”, “telephone”, “addressDetail”, “usage”, “time”),查询用户 最近一次用量记录 与 前五天用量记录的平均值 的差值 大于0.5的用户信息。
(此查询较慢,待优化,可以选择将size改小)
{
"aggs": {
"aggsName": {
// 桶聚合 (rid为表号)
"terms": {
"field": "rid",
"size": 1000,
"collect_mode":"breadth_first"
},
"aggs": {
// 返回的用户信息,最新用户信息
"dataResult": {
"top_hits": {
"_source": {
"includes": [
"userName",
"userNo",
"telephone",
"addressDetail",
"rid",
"usage",
"time"
]
},
"sort": [
{
"time": {
"order": "desc"
}
}
],
"size": 1
}
},
// 查询最近一条记录,时间字段倒序
//(usageSum中max,min,sum都可以,根据id聚合,只有一条)
"newResult": {
"terms": {
"execution_hint": "map",
"field": "id",
"collect_mode":"breadth_first",
"size": 40000,
"order": {
"timeMax": "desc"
}
},
"aggs": {
"usageSum": {
"max": {
"field": "usage"
}
},
"timeMax": {
"max": {
"field": "time"
}
},
"bucket_field": {
"bucket_sort": {
"sort": [],
"from": 0,
"size": 1
}
}
}
},
// 同上,查询前5天的数据,时间字段倒序
"oldResult": {
"terms": {
"execution_hint": "map",
"field": "id",
"collect_mode":"breadth_first",
"size": 40000,
"order": {
"timeMax": "desc"
}
},
"aggs": {
"usageSum": {
"max": {
"field": "usage"
}
},
"timeMax": {
"max": {
"field": "time"
}
},
"bucket_field": {
"bucket_sort": {
"sort": [],
"from": 1,
"size": 5
}
}
}
},
// 取得聚合后的结果
"newAvg": {
"avg_bucket": {
"buckets_path": "newResult>usageSum"
}
},
"oldAvg": {
"avg_bucket": {
"buckets_path": "oldResult>usageSum"
}
},
// 条件筛选
"sales_bucket_filter": {
"bucket_selector": {
"buckets_path": {
"newAvg": "newAvg",
"oldAvg": "oldAvg"
},
"script": "(params.newAvg-params.oldAvg) > 0.5 || (params.oldAvg-params.newAvg) > 0.5"
}
},
// 分页返回
"bucket_field": {
"bucket_sort": {
"sort": [],
"from": 1,
"size": 10
}
}
}
}
},
"size": 0
}