Elasticsearch按指定ID与日期范围统计平均速度超时问题求助
问题定位及修复方案
1 聚合逻辑错误
你当前的查询只能返回四个道路ID所有匹配数据的整体平均速度,无法得到每个ID的独立结果:你只做了全局过滤,没有按nS2ID字段分组统计。
2 网关超时原因
- 默认查询会返回10条原始匹配文档,聚合场景下无用,额外占用计算和传输资源
- 1个月的查询时间范围涉及数据量过大,全量扫描耗时过长
- 若nS2ID为text类型,terms查询会产生额外的性能开销
优化后查询语句
GET herev322_*/_search { "size": 0, // 不返回原始文档,大幅降低开销 "query": { // 把过滤条件放到query层,比放在聚合层性能更好 "bool": { "must": [ { "terms": { "nS2ID.keyword": [ // 若你的nS2ID本身是keyword类型可以去掉.keyword后缀 "102-4893", "102-4894", "102+10103", "102+10104" ] } }, { "range": { "pBT": { "from": "2021-01-01T07:00:00", "to": "2021-02-01T19:00:00" } } } ] } }, "aggs": { "group_by_ns2id": { // 按道路ID分组 "terms": { "field": "nS2ID.keyword", // 同上,字段为keyword类型就去掉.keyword "size": 4 // 仅返回4个目标分组,减少多余计算 }, "aggs": { "avg_speed": { // 每个分组单独计算平均速度 "avg": { "field": "speed" } } } } } }
验证建议
先把时间范围缩小到1天测试查询是否返回预期结果,确认逻辑正确后再逐步扩大时间范围。如果还是超时,可以联系ES集群管理员调整网关超时时间,或者给pBT、nS2ID字段增加索引优化查询性能。
内容的提问来源于stack exchange,提问作者Carlos Diaz
相关产品推荐
相关产品推荐

