1. 程式人生 > >利用kibana插件對Elasticsearch進行bool查詢

利用kibana插件對Elasticsearch進行bool查詢

iba lds 建立 lte must itl post where 但是

#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":1}}
{"salary":10,"title":"python"}
{"index":{"_id
":2}} {"salary":20,"title":"Scrapy"} {"index":{"_id":3}} {"salary":30,"title":"Django"} {"index":{"_id":4}} {"salary":40,"title":"Elasticsearch"}


#簡單過濾查詢

#最簡單的fiter查詢
#select * from testdb where salary=20
#filter 薪資為20的工作

GET lagou/testdb/_search
{
  "query":{
    "bool": {
      "must":{
        
"match_all":{} }, "filter": { "terms": { "salary": [20,10] } } } } }


#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": 20}},
        {"term": {"title": "python"}}
        ],
        "must_not": [
          {"term":{"salary":30}},
          {"term":{"salary":10}}
        ]
    }
  }
} 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": 30}}
          ]
        }}
        ]
    }
  }
} 


#過濾空和非空


#建立測試數
#select tags from testdb2 where tags is not NULL

GET lagou/testdb2/_bulk
{"index":{"_id":"1"}}
{"tags":["salary"]}
{"index":{"_id":"2"}}
{"tags":["salary","python"]}
{"index":{"_id":"3"}}
{"other_fields":["some data"]}
{"index":{"_id":"4"}}
{"tags":null}
{"index":{"_id":"5"}}
{"tags":["salary",null]}


#處理null空值的方法

#select tags from testdb2 where tags is not NULL

GET lagou/testdb2/_search
{
  "query": {
    "bool": {
      "must_not": {
        "exists": {
          "field": "tags"
        }
      }
    }
  }
}

利用kibana插件對Elasticsearch進行bool查詢