elasticsearch - 如何在Elasticsearch中按字段汇总数据?

标签 elasticsearch kibana kibana-4 elasticsearch-2.0

我正在使用kibana 4.4.1,并且在elasticsearch中,仅当PC状态更改(打开,关闭,警告等)时,我才存储PC的状态

我进入Elasticsearch的数据如下:

{ "status_id":1 , "pc":"lpt001" , "date":"2016-10-25T17:49:00Z" }
{ "status_id":3 , "pc":"lpt001" , "date":"2016-10-25T15:48:00Z" }
{ "status_id":4 , "pc":"lpt002" , "date":"2016-10-25T15:46:00Z" }
{ "status_id":1 , "pc":"lpt002" , "date":"2016-10-25T12:48:00Z" }

我要获得最新记录,以便随时拥有多少台PC被打开,关闭或出现问题。
我的查询就像:
GET cb-2016.10.26/_search
{
  "query": {
    "match_all": { }
  },
  "sort": [
    {
      "date": {
        "order": "desc"
      }
    }
  ], 
  "aggs": {
    "max_date":{
      "max": {
        "field": "date"
      }
    }
  }
}

结果是:
"aggregations": {
    "max_date": {
      "value": 1477417680000,
      "value_as_string": "2016-10-25T17:48:00.000Z"
    }
  }

但是我想要的是每个“pc”的max_date:“lpt001”,“lpt002”。

有什么方法可以通过“pc”字段分割max_date?我阅读了一些有关存储桶聚合的信息,但未达到结果。

谢谢

最佳答案

是的,您可以使用terms字段的pc聚合来做到这一点,然后将max_date移到terms一个的子聚合中:

POST cb-2016.10.26/_search
{
  "query": {
    "match_all": { }
  },
  "sort": [
    {
      "date": {
        "order": "desc"
      }
    }
  ], 
  "aggs": {
    "pcs": {
      "terms": {
        "field": "pc"
      },
      "aggs": {
        "max_date":{
          "max": {
            "field": "date"
          }
        }
      }
    }
  }
}

关于elasticsearch - 如何在Elasticsearch中按字段汇总数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40306894/

相关文章:

java - 未找到索引异常

hadoop - 如何向 Elastic Search 数据库添加计算?

elasticsearch - .net Timespan字段上的Kibana 4查询

elasticsearch - 展开父路径的对象字段的动态映射

elasticsearch - 如何使用ElasticSearch 5.1索引日期范围

ruby - 如何在 Elasticsearch for ruby​​ 中使用 More Like This API

elasticsearch - 在 Kibana 4 中对多个指标(计数)执行计算

elasticsearch - 无法在基巴纳 map 上显示位置

amazon-web-services - 如何从 Amazon elasticsearch 服务访问 Kibana?

angularjs - Kibana 未加载样式表