我想从每个文档的数组中获取不同范围的值的计数。例如,学生的文档包含数组“grades”,该数组的每个科目都有不同的分数,如数学-分数71,科学-分数91等。因此,我想获取每个学生的范围,如A - 2级科目,B - 1级科目。
所以,Map是这样的:
{
"student-grades": {
"mappings": {
"properties": {
"grades": {
"type": "nested",
"properties": {
"subject": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"score": {
"type": "float"
}
}
},...
}
}
}
}
对于计数范围,我创建了一个类似于以下内容的查询:
GET student-grades/_search
{
"aggs": {
"nestedAgg": {
"nested": {
"path": "grades"
},
"aggs": {
"gradeRanges": {
"range": {
"field": "grades.score",
"ranges": [
{
"key": "range1",
"to": 35.01
},
{
"key": "range2",
"from": 35.01,
"to": 50.01
},
{
"key": "range3",
"from": 50.01,
"to": 60.01
},
{
"key": "range4",
"from": 60.01,
"to": 70.01
},
{
"key": "range5",
"from": 70.01
}
]
},
"aggs": {
"perDoc": {
"top_hits": {
"size": 10
}
}
}
}
}
}
}
}
但是,它只给出了所有文档的范围列表。主题的数量不是固定的,所以我不能在top_hits中设置一个随机的大小。那么,我如何才能得到每个文档的所有范围呢?(我是elasticsearch的新手,所以我不知道它的所有功能。
1条答案
按热度按时间pes8fvy91#
我使用了一个简单的脚本来解决这个问题。
这将为每个文档提供单独的级别范围,如下所示: