ES上手之使用聚合功能分析结果

Elasticsearch聚合功能(aggregations)使你能够获取有关搜索结果的元信息,并回答像“德克萨斯州有多少个帐户持有人?”、“田纳西州的平均帐户余额是多少?”之类的问题。你可以在一个请求中搜索、过滤文档,并使用聚合功能分析结果。

例如,以下请求使用terms聚合功能(Simon:即按照某个字段名来聚合,类似MySQL中的group by <colunmName>)将bank索引中的所有帐户按州名分组,并降序返回帐户数量最多的十个州:

GET /bank/_search
{
  "size": 0,
  "aggs": {
    "group_by_state": {
      "terms": {
        "field": "state.keyword"
      }
    }
  }
}

返回结果中的buckets字段是state字段相关的值。 doc_count显示了每个state对应的帐户数。 例如,你可以看到ID(爱达荷州)有27个帐户。 因为请求中设置了size=0,所以响应仅包含聚合结果。

{
  "took": 29,
  "timed_out": false,
  "_shards": {
    "total": 5,
    "successful": 5,
    "skipped" : 0,
    "failed": 0
  },
  "hits" : {
     "total" : {
        "value": 1000,
        "relation": "eq"
     },
    "max_score" : null,
    "hits" : [ ]
  },
  "aggregations" : {
    "group_by_state" : {
      "doc_count_error_upper_bound": 20,
      "sum_other_doc_count": 770,
      "buckets" : [ {
        "key" : "ID",
        "doc_count" : 27
      }, {
        "key" : "TX",
        "doc_count" : 27
      }, {
        "key" : "AL",
        "doc_count" : 25
      }, {
        "key" : "MD",
        "doc_count" : 25
      }, {
        "key" : "TN",
        "doc_count" : 23
      }, {
        "key" : "MA",
        "doc_count" : 21
      }, {
        "key" : "NC",
        "doc_count" : 21
      }, {
        "key" : "ND",
        "doc_count" : 21
      }, {
        "key" : "ME",
        "doc_count" : 20
      }, {
        "key" : "MO",
        "doc_count" : 20
      } ]
    }
  }
}

你可以组合聚合语句来构建更复杂的数据汇总查询。 例如,以下请求将avg聚合嵌套在先前的group_by_state聚合内,以计算每个州的平均帐户余额。

GET /bank/_search
{
  "size": 0,
  "aggs": {
    "group_by_state": {
      "terms": {
        "field": "state.keyword"
      },
      "aggs": {
        "average_balance": {
          "avg": {
            "field": "balance"
          }
        }
      }
    }
  }
}

除了按计数结果进行排序,你还可以在terms聚合查询中指定子嵌套聚合查询的结果进行排序:

GET /bank/_search
{
  "size": 0,
  "aggs": {
    "group_by_state": {
      "terms": {
        "field": "state.keyword",
        "order": {
          "average_balance": "desc"
        }
      },
      "aggs": {
        "average_balance": {
          "avg": {
            "field": "balance"
          }
        }
      }
    }
  }
}

除了这些基本的聚合功能外,Elasticsearch还提供了定制化的聚合,用于在多个字段上操作并分析特定类型的数据,例如日期,IP地址和地理数据。 你还可以将单个聚合的结果传送到管道聚合中,以进行进一步分析。

聚合提供的核心分析可提供一些高级功能,例如使用机器学习来检测异常。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容