需要一种更好的方法或优化的查询来检索每个级别的状态。
我们正试图从存储在ES中的大量数据中获取IoT设备状态的聚合数据。存储中的数据将如下所示
{
"deviceType":"temperature",
"deviceName":"sensor1",
"serviceName":"HomeService",
"serviceCatagory":"Home Automation",
"warning":true,
"communicationType":"http",
"createdDate":"",
"location":"",
"poc":"",
"aPoc":""
}
,并将根据设备类型添加字段。对于每种状态,都会将文档插入数据库。
使用此数据,我们对其应用聚合查询,以查找每种设备类型或设备或serviceName或serviceCategory或位置等的每个状态的计数。
我们要访问数据库的样本聚合查询是
{
"size": 0,
"aggs": {
"hour_value": {
"date_histogram": {
"field": "date",
"interval": "hour"
},
"aggs": {
"devicetype": {
"terms": {
"field": "deviceType",
"size": 1000
},
"aggs": {
"terms": {
"field": "deviceName",
"size": 1000
},
"aggs": {
"terms": {
"field": "serviceName",
"size": 1000
},
"aggs": {
"terms": {
"field": "serviceCatogery",
"size": 1000
},
"aggs": {
"terms": {
"field": "location",
"size": 1000
},
"aggs": {
"warning_count": {
"value_count": {
"field": "warning"
}
},
"trip_count": {
"value_count": {
"field": "trip"
}
},
"running_count": {
"value_count": {
"field": "running"
}
},
"stopped_count": {
"value_count": {
"field": "stopped"
}
},
"offline_count": {
"value_count": {
"field": "offline"
}
}
}
}
}
}
}
}
}
}
}
}
查询中指定的大小可能会持续几天。
但是上面的查询花费太多时间(将近15分钟,并且挂起了一段时间)来从数据库获取数据。 我们正在汇总的卷每小时将近12 GB,我们试图每小时查询一次此查询。
任何有关想法或查询的帮助都将非常有帮助。