分析与汇总结果
Elasticsearch聚合使您能够获取有关搜索结果的元信息,并回答诸如“德克萨斯州有多少个帐户持有人”之类的问题。或“田纳西州的平均帐户余额是多少?” 您可以在一个请求中搜索文档,过滤命中并使用汇总分析结果。
例如,以下请求使用terms
汇总将bank
索引中的所有帐户按状态分组,并按降序返回帐户数量最多的十个州:
GET /bank/_search
{
"size": 0,
"aggs": {
"group_by_state": {
"terms": {
"field": "state.keyword"
}
}
}
}
buckets
在相应中是state字段的值。该 doc_count
显示的是每个州帐户数量。例如,您可以看到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地址和地理数据。您还可以将单个聚合的结果反馈到管道聚合中,以进行进一步分析。
聚合提供的核心分析功能可启用高级功能,例如使用机器学习来检测异常。