[
{"Exam" : "mid-term 1", "Name": "abc", "Roll no" : "1" , "English" :"Pass", "Hindi" :"Pass" , "Physics" : "Not available", "Maths": "Fail"},
{"Exam" : "mid-term 2", "Name": "abc", "Roll no" : "1" , "English" :"Fail", "Hindi" :"Pass" , "Physics" : "Fail", "Maths": "result awaiting"},
{"Exam" : "mid-term 3", "Name": "abc", "Roll no" : "1" , "English" :"Pass", "Hindi" :"Fail" , "Physics" : "Pass", "Maths": "Pass"},
{"Exam" : "mid-term 1", "Name": "cde", "Roll no" : "2" , "English" :"Pass", "Hindi" :"Pass" , "Physics" : "Pass", "Maths": "Pass"},
{"Exam" : "mid-term 2", "Name": "cde", "Roll no" : "2" , "English" :"Pass", "Hindi" :"Pass" , "Physics" : "Pass", "Maths": "Pass"},
{"Exam" : "mid-term 3", "Name": "cde", "Roll no" : "2" , "English" :"Pass", "Hindi" :"Pass" , "Physics" : "Pass", "Maths": "Pass"},
{"Exam" : "mid-term 1", "Name": "xyz", "Roll no" : "3" , "English" :"Pass", "Hindi" :"Pass" , "Physics" : "Pass", "Maths": "Pass"},
{"Exam" : "mid-term 2", "Name": "xyz", "Roll no" : "3" , "English" :"result awaiting", "Hindi" :"Fail" , "Physics" : "Fail", "Maths": "Pass"},
{"Exam" : "mid-term 3", "Name": "xyz", "Roll no" : "3" , "English" :"Pass", "Hindi" :"Pass" , "Physics" : "Fail", "Maths": "Fail"},
{"Exam" : "mid-term 1", "Name": "zxc", "Roll no" : "4" , "English" :"Not available", "Hindi" :"result awaiting" , "Physics" : "Fail", "Maths": "Pass"},
{"Exam" : "mid-term 2", "Name": "zxc", "Roll no" : "4" , "English" :"Not available", "Hindi" :"Pass" , "Physics" : "Pass", "Maths": "Fail"},
{"Exam" : "mid-term 3", "Name": "zxc", "Roll no" : "4" , "English" :"Not available", "Hindi" :"Pass" , "Physics" : "Pass", "Maths": "Pass"},
]假设我们有像上面这样的数据,有名字和Rollno以及主题及格的学生的三种不同的考试数据,失败/不可用(比如不尝试),结果等待。
现在我们需要在物理不及格的基础上计算不同的字段,因此ROll no 1,2,4在物理考试中失败(在任何考试中都不及格,中期1/2 /3),所以如果我们从物理失败中获取数据,它将如下所示
{"Exam" : "mid-term 3", "Name": "abc", "Roll no" : "1" , "English" :"Pass", "Hindi" :"Fail" , "Physics" : "Pass", "Maths": "Pass"},
{"Exam" : "mid-term 2", "Name": "xyz", "Roll no" : "3" , "English" :"Pass", "Hindi" :"Fail" , "Physics" : "Fail", "Maths": "Pass"},
{"Exam" : "mid-term 3", "Name": "xyz", "Roll no" : "3" , "English" :"Pass", "Hindi" :"Pass" , "Physics" : "Fail", "Maths": "Fail"},
{"Exam" : "mid-term 1", "Name": "zxc", "Roll no" : "4" , "English" :"Not available", "Hindi" :"result awaiting" , "Physics" : "Fail", "Maths": "Pass"},但我不希望学生的数据只重复一次(不管考试)。
像下面的数据
{"Exam" : "mid-term 3", "Name": "abc", "Roll no" : "1" , "English" :"Pass", "Hindi" :"Fail" , "Physics" : "Pass", "Maths": "Pass"},
{"Exam" : "mid-term 2", "Name": "xyz", "Roll no" : "3" , "English" :"Pass", "Hindi" :"Fail" , "Physics" : "Fail", "Maths": "Pass"},
{"Exam" : "mid-term 1", "Name": "zxc", "Roll no" : "4" , "English" :"Not available", "Hindi" :"result awaiting" , "Physics" : "Fail", "Maths": "Pass"},现在我要清点数据
English : 2 ( roll 1 annd 3 was pass , not condidered roll no 4 english due to Not available")
Hindi : 0 (no pass)
Physics: 1
Maths: 3我们能在单个ES查询中实现此计数吗?
发布于 2022-06-18 10:45:04
是的,在主题上使用术语聚合
{
"aggs":{
"english":{
"terms": { "field": "english" }
},
"physics":{
"terms": { "field": "physics" }
},
"hindi":{
"terms": { "field": "hindi" }
}
}
}结果会是这样的
"aggs": {
"english": [
{
"Pass": {
"doc_count": 2
}
},
{
"Fail": {
"doc_count": 1
}
},
{
"Not Available": {
"doc_count": 3
}
}
]
}
}```https://stackoverflow.com/questions/72646412
复制相似问题