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、案例

案例:按照商品类型分类聚合,对每个分桶展示相关的前 5 条文档

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
          }
        }
      }
    }
  }
}

猜你喜欢

转载自blog.csdn.net/wlei0618/article/details/131011211