#bool查询
#老版本的filtered查询已经被bool代替
#用 bool包括 must should must_not filter来完成 ,格式如下:
#bool:{
# "filter":[],
# "must":[],
# "should":[],
# "must_not"[],
#}
#must 数组内的所有查询都必须满足
#should 数组内只需要满足一个
#must_not 一个都不能满足
#建立测试数据
POST lagou/testdb/_bulk
{"index":{"_id":}}
{"salary":,"title":"python"}
{"index":{"_id":}}
{"salary":,"title":"Scrapy"}
{"index":{"_id":}}
{"salary":,"title":"Django"}
{"index":{"_id":}}
{"salary":,"title":"Elasticsearch"}
#简单过滤查询
#最简单的fiter查询
#select * from testdb where salary=20
#filter 薪资为20的工作
GET lagou/testdb/_search
{
"query":{
"bool": {
"must":{
"match_all":{}
},
"filter": {
"terms": {
"salary": [,]
}
}
}
}
}
#filter里面也能写多值查询
#select * from testdb where title="python"
GET lagou/testdb/_search
{
"query":{
"bool": {
"must":{
"match_all":{}
},
"filter": {
"term": {
"title": "Python"
}
}
}
}
}
#数据在入库的时候就都已经进行大小写处理了,所以现在用term查询的时候是找不到需要的内容的,但是用match的时候就可以了
#查看分析器的解析结果
GET _analyze
{
"analyzer": "ik_max_word",
"text":"python网络"
}
#bool过滤查询,可以组合过滤查询
# select * from testdb where (salary=20 OR title=Python) AND (salary != 30)
# 查询薪资等于20k或者工作为python的工作,排除价格为30k的
GET lagou/testdb/_search
{
"query":{
"bool": {
"should":[
{"term": {"salary": }},
{"term": {"title": "python"}}
],
"must_not": [
{"term":{"salary":}},
{"term":{"salary":}}
]
}
}
} x
#嵌套查询
#select * from testdb where title="python" or ( title="django" AND salary=30)
GET lagou/testdb/_search
{
"query":{
"bool": {
"should":[
{"term": {"title": "python"}},
{"bool": {
"must": [
{"term": {"title": "django"}},
{"term": {"salary": }}
]
}}
]
}
}
}
#过滤空和非空
#建立测试数
#select tags from testdb2 where tags is not NULL
GET lagou/testdb2/_bulk
{"index":{"_id":""}}
{"tags":["salary"]}
{"index":{"_id":""}}
{"tags":["salary","python"]}
{"index":{"_id":""}}
{"other_fields":["some data"]}
{"index":{"_id":""}}
{"tags":null}
{"index":{"_id":""}}
{"tags":["salary",null]}
#处理null空值的方法
#select tags from testdb2 where tags is not NULL
GET lagou/testdb2/_search
{
"query": {
"bool": {
"must_not": {
"exists": {
"field": "tags"
}
}
}
}
}