现在es已经更新至6.5版本,有些用法已经被抛弃,不在使用。例如Filter Query Missing已在es5以后的版本废除,简单点就是以前我们可以在kibana这样查数学成绩为空的数量:
GET /student/doc/_search
{
"query": {
"bool": {
"must": [
{"match": {
"subject": "数学"
}},
{"constant_score": {
"filter":
{"missing": {
"field": "grade"
}},
"boost": 1.2
}}
]
}
}
}
但结果是:
抛弃了Filter Query Missing的用法,是因为官方觉得用exists就足够解决这个问题,例如上面的查询可以修改为:
GET /student/doc/_search
{
"query": {
"bool": {
"must": [
{"match": {
"subject": "数学"
}}
],"must_not": [
{"exists": {"field": "grate"}}
]
}
}
}
那么现在问题来了!
但我要查询空值为非必要条件是该怎么查询呢?例如上面的查询如果我要查数学成绩为空或者数学成绩在60以下的数量该怎么查询?以前还可以用should包含missing和range查询,为了这个问题我是焦头烂耳,网上的资源大多没有及时更新。终于我在官网看文档中找到了解决方法!!
废话少说,直奔主题。
通过上图我们知道可以missing虽然在Query中被抛弃,但在Aggregation中仍然可以使用,解决办法:
GET /student/doc/_search
{
"query": {
"bool": {
"must": [
{"match": {
"subject": "数学"
}}
]
}
},"aggs": {
"missGrate": {
"missing": {
"field": "grade"
}
},
"filter":{
"filter": {
"range": {
"grade": {
"lte": 60
}
}
}
}
}
}
通过聚合我就可以去查询空值为非必要条件的查询,但仍然有个缺陷就是无法获取具体详细信息,虽然我只要求获取数量。希望厉害的大神能够补充。具体API实现我就不贴了,也不难。
本篇文章为小弟第一次写博客,如有不正确的请通知,及时改正。