Elasticsearch 对聚合结果集的内容排序
工作中遇到需要获取 elasticsearch 的数据聚合结果,然后对结果集的某个字段进行排序展示,这里要用到 top_hits
。
下面是实际代码
根据聚合结果,做排序,并带出需要的字段
GET index_name/_search
{
"track_total_hits": true,
"query": {
"bool": {
"must": [
.... // 省略了其他条件
]
}
},
"size": 0,
"aggs": {
"group_by_field_name1": {
"terms": {
"field": "field_name1", // 根据某个字段做聚合
"size": 10
},
"aggs": {
"top_hits": {
"top_hits": {
"size": 30, // 再从聚合结果中获取相应的结果集数量
"_source": [
"field_name1",
"field_name2",
..... // 需要的字段名称
],
"sort": [
{
"field_name1": {
"order": "desc" // 然后对结果中某个字段排序
}
} // 支持多个排序
]
}
}
}
}
}
}