多级优化的弹性搜索聚合查询

时间:2018-12-18 07:00:57

标签: elasticsearch aggregation elastic-stack elasticsearch-aggregation

需要一种更好的方法或优化的查询来检索每个级别的状态。

我们正试图从存储在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,我们试图每小时查询一次此查询。

任何有关想法或查询的帮助都将非常有帮助。

0 个答案:

没有答案