MST
星途 面试题库

面试题:ElasticSearch复杂聚合结果的排序与分页处理

在一个包含员工信息的ElasticSearch索引中,员工信息包括部门、薪资、年龄等字段。现在需要先按部门进行聚合,然后在每个部门内按平均薪资升序排列,并且要对所有聚合结果进行分页,每页显示5个部门的聚合信息,获取第3页的内容。请详细说明实现思路并给出ElasticSearch查询语句。
34.5万 热度难度
数据库ElasticSearch

知识考点

AI 面试

面试题答案

一键面试

实现思路

  1. 聚合操作:使用terms聚合按部门进行分组。
  2. 子聚合:在每个部门的分组内,使用avg聚合计算平均薪资,并通过sort子句按平均薪资升序排列。
  3. 分页:利用fromsize参数进行分页,from指定起始位置,size指定每页显示的数量。

ElasticSearch查询语句

{
    "size": 0,
    "aggs": {
        "departments": {
            "terms": {
                "field": "部门",
                "size": 5,
                "from": 10
            },
            "aggs": {
                "average_salary": {
                    "avg": {
                        "field": "薪资"
                    }
                }
            },
            "sort": {
                "average_salary.value": "asc"
            }
        }
    }
}

解释:

  • size: 0:不返回文档,只返回聚合结果。
  • terms聚合中的field指定按“部门”字段分组。
  • size设置为5,表示每页显示5个部门的聚合信息。
  • from设置为10,表示获取第3页(从0开始计数,每页5个,第3页起始位置为(3 - 1) * 5 = 10)。
  • avg子聚合计算平均薪资。
  • sort子句按平均薪资升序排列。