我在跟踪几个学生的出勤情况。我将他们的详细信息存储在索引中,如下所示。
“entries”中的每个文档几乎没有其他字段。以下数据显示一个学生在“星期一”上了6节课。
“条目”的类型为“嵌套”
{
reg_id: 1111,
"entires" : [
{
id: "123"
day: 'Monday'
},
{
id: "1234",
attendance: true
},
{
id: "12345",
classes_attended: 6
}
],
}
我要数一数你每天上的每节课的学生人数。
例如“为“星期一”找到72个学生条目,他们参加了6节课”
示例所需输出-这只是一个示例,如果输出模式发生更改,我完全可以。
[
{
"day" : "monday",
"classes_attended": 6,
count: 4
},
{
"day" : "monday",
"classes_attended": 1,
count: 5
},
{
"day" : "tuesday",
"classes_attended": 5,
count: 2
},
{
"day" : "tuesday",
"classes_attended": 6,
count: 1
}
]
不确定如何开始聚合查询:
我尝试了以下查询,但我知道它不是正确的解决方案
"aggs": {
"attendance_aggs": {
"nested": {
"path": "entries"
},
"aggs": {
"days": {
"terms": {
"field": "entries.day"
},
"aggs": {
"attended": {
"reverse_nested": {},
"aggs":{
"class_attended_day": {
"terms": {
"field": "entries.classes_attended"
},
"aggs": {
"class_attended_days_count": {
"reverse_nested": {},
"aggs": {
"classes_attended_final": {
"cardinality": {
"field": "entries.class_attended"
}
}
}
}
}
}
}
}
}
}
}
}
}
1条答案
按热度按时间q5iwbnjs1#
目前还不清楚顶层对象是什么,所以我假设它是“每天的学生出勤记录”。我也不确定
entries.ids
但我想你以后会需要它们的,所以我会让它们保持原样。现在,既然你
entries
对象的共同点是id
,它们可以解耦。意思是你应该使用nested
如果有,仅当您在需要保留其属性连接的所有对象上共享某些属性时。因为我看不见entries.id
在AGG中的任何地方,我都建议对Map进行以下调整:你的问题是:
然后可以将响应后处理为您喜欢的任何内容。
编辑
你可以劫持
reverse_nested
但在引用其他嵌套条目时需要返回到它: