面试题答案
一键面试以下是实现该需求的DSL示例及解释:
{
"aggs": {
"by_article": {
"terms": {
"field": "article_id" // 按文章ID进行分组,假设存在article_id字段标识文章
},
"aggs": {
"by_comment_likes": {
"range": {
"field": "comment.likes", // 评论的点赞数字段,假设评论结构中点赞数字段为comment.likes
"ranges": [
{ "from": 0, "to": 10 },
{ "from": 10, "to": 20 },
{ "from": 20, "to": null }
]
}
}
}
}
}
}
解释:
- 外层聚合:
by_article
是一个terms
聚合,通过article_id
字段对文章进行分组。这会将所有文档按文章ID进行归类。
- 内层聚合:
by_comment_likes
是在by_article
聚合内的range
聚合。- 它基于
comment.likes
字段(假设文档结构中评论的点赞数字段为comment.likes
)进行点赞数区间的划分。 ranges
数组定义了不同的点赞数区间,分别是0到10(不包含10),10到20(不包含20)以及20及以上。
通过这种嵌套聚合方式,首先按文章进行分组,然后在每个文章分组内按评论的点赞数区间统计评论数量。