如何解决如何在存储桶选择器聚合中按键过滤
示例问题
| id | lesson_id | part | passed
| 1 | 1 | A | true
| 2 | 1 | A | true
| 3 | 1 | B | false
| 4 | 2 | A | true
| 5 | 2 | B | true
| 6 | 3 | A | false
| 7 | 3 | B | true
Questions
1. Find lesson_ids where part A has been passed at least once? (Answer lesson id 1)
2. Find lesson_ids where part B has been passed at least once? (Answer lesson id 2)
3. Find lesson_ids where parts A and B have been passed at least once? (Answer lesson id 3)
我想出了以下Elasticsearch查询
{
"size": 0,"aggs": {
"lessons": {
"terms": {
"field": "lesson_id"
},"aggs": {
"parts": {
"terms": {
"field": "part"
},"aggs": {
"total_passed": {
"sum": { "field": "passed"}
},"passed_parts": {
"bucket_selector": {
"buckets_path": {
"totalPassed": "total_passed"
},"script": "params.totalPassed >= 1"
}
}
}
},"both_parts_passed": {
"bucket_selector": {
"buckets_path": {
"bucketCount": "parts._bucket_count"
},"script": "params.bucketCount == 1" // "params.bucketCount == 2" will answer question 3
}
}
}
}
}
}
这会给具有课程ID 1和3的简历,因为它们通过了A部分或B部分
{
"took": 13,"timed_out": false,"_shards": {
"total": 5,"successful": 5,"skipped": 0,"failed": 0
},"hits": {
"total": 8,"max_score": 0.0,"hits": []
},"aggregations": {
"lessons": {
"doc_count_error_upper_bound": 0,"sum_other_doc_count": 0,"buckets": [
{
"key": "1","doc_count": 3,"parts": {
"doc_count_error_upper_bound": 0,"buckets": [
{
"key": "A","doc_count": 2,"totalPassed": {
"value": 2.0,"value_as_string": "true"
}
}
]
}
},{
"key": "3","buckets": [
{
"key": "B","value_as_string": "true"
}
}
]
}
}
]
}
}
}
如何进一步选择具有特定键名的存储桶,例如仅包含键名A(问题1),B(问题2)的存储桶?也许还有另一种方法可以做到这一点。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。