我是elasticsearch的新手,我有问题有效地查询它。我有以下类型的对象:
Teacher
Class
TeacherClass
(包含整数字段teacher_id
和class_id
)Event
(带整数字段teacher_class_id
)所以结构看起来像这样:
___________ _______________ _________
| Teacher |_____/| TeacherClass |\_____| Class |
|_________| \|______________|/ |_______|
|
|
___/_\___
| Event |
|_______|
我想获得与给定教师相关的活动数量。目前,我通过两个查询来执行此操作:
TeacherClass
上搜索查询(以获取TeacherClass
ID数组)Event
计数查询(计算teacher_class_id
等于数组中某个值的事件)。有没有办法在单个查询中执行此操作?
答案 0 :(得分:0)
此处的关键字为非规范化。您需要对数据进行非规范化,以便每个文档包含以下字段:
{
"teacher_id": 1,
"teacher_name": "John Math",
"class_id": 2,
"class_name": "Math",
"event_id": 3,
"event_name": "My Event"
}
然后,您可以使用terms
上的teacher_id
聚合汇总数据,并使用value_count
上的event_id
子聚合查看您有多少不同的事件。
{
"query": {
"match_all": {}
},
"aggs": {
"teachers": {
"terms": {
"field": "teacher_id"
},
"aggs": {
"events": {
"value_count": {
"field": "event_id"
}
}
}
}
}
}