Elasticsearch如何查询指定编号传感器近一天的最大、最小数值
查询存在的核心问题
- 没有添加
sensor.number = 13的过滤条件,未限定目标传感器 - 没有添加近一天的时间范围过滤,会查询所有历史数据
- 聚合范围未和过滤条件绑定:nested查询的作用只是筛选「包含符合要求的嵌套对象的父文档」,聚合时直接取全量
sensor.values对象,会把其他传感器的数值也纳入计算
修正后的查询语句
假设你的文档根节点存储了上报时间字段为report_time,如果时间字段存放在其他位置,自行修改对应路径即可:
{ "query": { "bool": { "must": [ // 近一天时间过滤,时间字段路径根据实际结构调整 { "range": { "report_time": { "gte": "now-1d/d", "lte": "now/d" } } }, { "nested": { "path": "sensor", "query": { "bool": { "must": [ // 限定传感器编号为13 { "term": { "sensor.number": 13 } }, { "nested": { "path": "sensor.values", "query": { "match": { "sensor.values.type": "TEMPERATURE" } } } } ] } } } } ] } }, "aggs": { // 先进入sensor嵌套层,过滤出编号为13的传感器 "sensor_agg": { "nested": { "path": "sensor" }, "aggs": { "filter_sensor_13": { "filter": { "term": { "sensor.number": 13 } }, "aggs": { // 再进入对应传感器的values嵌套层 "values_agg": { "nested": { "path": "sensor.values" }, "aggs": { "filter_temperature": { "filter": { "match": { "sensor.values.type": "TEMPERATURE" } }, "aggs": { "max_temp": { "max": { "field": "sensor.values.value" } }, "min_temp": { "min": { "field": "sensor.values.value" } } } } } } } } } } }, // 不需要返回原始文档,仅保留聚合结果,提升查询性能 "size": 0 }
内容的提问来源于stack exchange,提问作者RDR_Dev
相关产品推荐
相关产品推荐

