ES中使用 Top Hits 查询分桶聚合结果的每个桶的详细数据
1、使用场景
Top hits(顶部命中)是一个聚合功能,用于在查询结果中返回每个桶(bucket)中顶部N个文档,这对于需要在聚合结果中查看每个桶中的最相关或最高评分文档的情况非常有用。
简单来说,Top Hits就是对聚合结果中相关文档的详细展示,它不同于Post Filter, Post Filter是基于源数据的查询,和Agg没有因果关系,其结果不对Aggs产生任何影响。 Top Hits则是基于Aggs的结果的查询,其受到Aggs结果的影响。
2、语法
Top Hits聚合的语法如下:
{
"aggs": {
"aggregation_name": {
"terms": {
"field": "字段名"
},
"aggs": {
"top_docs": {
"top_hits": {
"size": 数量,
"sort": [
{
"排序字段": {
"order": "排序顺序"
}
}
]
}
}
}
}
}
}
其中,“aggregation_name” 是聚合操作的名字,“字段名”是要进行分桶的字段。“数量”是要获取每个桶中的文档数量,可以选择指定多个排序字段以及每个字段的排序顺序。
3、案例
按照商品类型分类聚合,对每个分桶展示相关前10条文档
GET goods/_search
{
"size": 0,
"aggs": {
"tags_bucket": {
"terms": {
"field": "type.keyword"
},
"aggs": {
"top_agg": {
"top_hits": {
"size": 10,
"sort": [
{
"price": {
"order": "desc"
}
}
],
"from": 0
}
}
}
}
}
}
Optional类中,of()和ofNullable()方法的用法与区别
of(T value): 返回一个携带被指定的value,且该value不能为null;
ofNullable(T value):如果指定的value不为Null,则返回携带有该value的Optional类实例,否则返回一个value值为Null的Optional类实例。