我正在尝试对经过筛选的文档集执行聚合;但是,过滤器细节需要使用聚合(每个'申请人'最近'测试')。 顶级聚合将在文档的字段上完成,但在与执行过滤聚合的字段不同的字段上完成。
例如(我在这里建立另一个用户的问题:Query or Filter for minimum field value?)。
给出以下一组文件:
{ "test": 1, "applicant":1, "score":90, “topic”:”geometry”},
{ "test": 2, "applicant":2, "score":65, “topic”:”physics” },
{ "test": 3, "applicant":2, "score":88, "topic”:”geometry”},
{ "test": 4, "applicant":1, "score":23, "topic”:”english” },
{ "test": 5, "applicant”:3, "score”:50, "topic”:”physics” },
{ "test": 6, "applicant”:3, "score”:77, "topic”:”english” }
我们有兴趣了解每个类别中有多少用户获得最高分。
换句话说,我们想要:
因此,对于第1步,我们应该只保留:
{ "test": 1, "applicant":1, "score":90, “topic”:”geometry” },
{ "test": 3, "applicant":2, "score":88, "topic”:”geometry” },
{ "test": 5, "applicant”:3, "score”:50, "topic”:”physics” },
{ "test": 6, "applicant”:3, "score”:77, "topic”:”english” }
并且对于第2步,按主题分组:
{“topic”:”geometry” , “count”: 2}
{“topic”:”physics” , “count”: 1}
{“topic”:”english” , “count”: 1}
问题是,如果我使用aggregation / top_hits进行过滤:
{
"aggs": {
“applicants”: {
"terms": {
"field": “applicant”,
"order" : { “highest_score" : "desc" }
},
"aggs": {
“highest_score": { “max”: { "field": "score" }},
“highest_score_top_hits": {
"top_hits": {
"size":1,
"sort": [{"score": {"order": "desc"}}]
}
}
}
}
}
}
我的第一步是正确的(top_hits),但是如果我按'主题'添加'父'聚合,top_hits聚合将不再正常工作,因为'申请人'将在不同的'主题'存储桶之间混合,因此,最高分数的汇总将是不正确的。
看起来最好的方法是在“主题”聚合之前使用查询过滤器,但我无法创建这样的过滤器,因此它只保留每个申请人的最高得分测试。
有什么想法吗?