官方解释:
一个top_hits指标聚合不断被聚合跟踪最相关的文档。该聚合器旨在用作子聚合器,以便可以按存储分区汇总最匹配的文档。
该top_hits聚合器可以有效地用于通过存储桶聚合器按某些字段对结果集进行分组。一个或多个存储桶聚合器确定将结果集切成哪些属性
个人解释:
将聚合结果进行在再过滤,每个组内数据排序取前N个。
1. Top Hits Aggregation
- from: 与要获取的第一个结果的偏移量。
- size: 每个存储桶返回的最匹配匹配项的最大数量。默认情况下,返回前三个匹配项。
- sort: 热门匹配项的排序方式。默认情况下,命中按主要查询的分数排序。
- _source: 限定返回哪些字段。
以下查询是根据type进行分组聚合,每个类型里根据age进行倒序排序,取第一条数据。
限制返回"age", “type”, "name"字段。
POST schools/room/_search
{
"size": 0,
"aggs": {
"group_agg":{
"terms": {
"field": "type"
},
"aggs": {
"top_data": {
"top_hits": {
"size": 1,
"sort": [
{
"age": {
"order": "desc"
}
}
],
"_source": {
"includes": ["age", "type", "name"]
}
}
}
}
}
}
}
效果
{
"took": 49,
"timed_out": false,
"_shards": {
"total": 3,
"successful": 3,
"failed": 0
},
"hits": {
"total": 5,
"max_score": 0,
"hits": []
},
"aggregations": {
"group_agg": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": "bj",
"doc_count": 2,
"top_data": {
"hits": {
"total": 2,
"max_score": null,
"hits": [
{
"_index": "schools",
"_type": "room",
"_id": "5",
"_score": null,
"_source": {
"name": "房间5",
"type": "bj",
"age": 5
},
"sort": [
5
]
}
]
}
}
},
{
"key": "sz",
"doc_count": 2,
"top_data": {
"hits": {
"total": 2,
"max_score": null,
"hits": [
{
"_index": "schools",
"_type": "room",
"_id": "4",
"_score": null,
"_source": {
"name": "房间2",
"type": "sz",
"age": 22
},
"sort": [
22
]
}
]
}
}
}
]
}
}
}
项目推荐
IT-CLOUD :IT服务管理平台,集成基础服务,中间件服务,监控告警服务等。
IT-CLOUD-ACTIVITI6 :Activiti教程源码。博文在本CSDN Activiti系列中。
IT-CLOUD-ELASTICSEARCH :elasticsearch教程源码。博文在本CSDN elasticsearch系列中。开源项目,持续更新中,喜欢请 Star~