首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >弹性搜索:获取少数字段数据的计数

弹性搜索:获取少数字段数据的计数
EN

Stack Overflow用户
提问于 2022-06-16 13:08:36
回答 1查看 31关注 0票数 0
代码语言:javascript
复制
[
{"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),所以如果我们从物理失败中获取数据,它将如下所示

代码语言:javascript
复制
{"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"},

但我不希望学生的数据只重复一次(不管考试)。

像下面的数据

代码语言:javascript
复制
{"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"},

现在我要清点数据

代码语言:javascript
复制
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查询中实现此计数吗?

EN

回答 1

Stack Overflow用户

发布于 2022-06-18 10:45:04

是的,在主题上使用术语聚合

代码语言:javascript
复制
{
  "aggs":{
    "english":{
      "terms": { "field": "english" }
    },
     "physics":{
      "terms": { "field": "physics" }
    },
     "hindi":{
      "terms": { "field": "hindi" }
    }
  }
}

结果会是这样的

代码语言:javascript
复制
  "aggs": {
    "english": [
      {
        "Pass": {
          "doc_count": 2
        }
      },
      {
        "Fail": {
          "doc_count": 1
        }
      },
      {
        "Not Available": {
          "doc_count": 3
        }
      }
    ]
  }
}```
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72646412

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档