MST

星途 面试题库

面试题:ElasticSearch搜索API之聚合与排序结合

在ElasticSearch索引中,文档有'product_name'(产品名称)、'price'(价格)和'sales_volume'(销量)字段。要求通过搜索API,按产品名称进行聚合,并且在每个聚合桶内,先按销量降序排序,再按价格升序排序,最后返回每个产品聚合桶中销量排名前三且价格最低的文档信息。请说明具体实现步骤及使用到的API和相关参数。
22.8万 热度难度
数据库ElasticSearch

知识考点

AI 面试

面试题答案

一键面试
  1. 使用的APIPOST {index}/_search
  2. 实现步骤及相关参数
    • 请求体内容
{
    "size": 0,
    "aggs": {
        "product_name_agg": {
            "terms": {
                "field": "product_name.keyword",
                "size": 10000 // 根据实际情况调整,确保能包含所有产品名称
            },
            "aggs": {
                "top_sales_and_lowest_price": {
                    "top_hits": {
                        "sort": [
                            {
                                "sales_volume": {
                                    "order": "desc"
                                }
                            },
                            {
                                "price": {
                                    "order": "asc"
                                }
                            }
                        ],
                        "size": 3
                    }
                }
            }
        }
    }
}
  • 解释
    • size: 0 表示不返回顶层搜索结果,只关注聚合结果。
    • terms 聚合按 product_name.keyword 字段进行聚合,因为 product_name 一般为文本类型,需使用keyword子字段进行聚合。size 参数用于指定聚合桶的最大数量。
    • top_hits 子聚合用于在每个产品名称聚合桶内,先按 sales_volume 降序排序,再按 price 升序排序,并返回排名前三的文档信息。