天津11选5top10遗漏:elasticsearch布爾查詢

作者: 魯智深 分類: java 發布時間: 2018-05-13 03:20

天津11选5中奖结果 www.ebzvaz.com.cn 開始我們組合查詢中布爾查詢的學習!

bool查詢包括must,should,must_not,filter來完成

bool的寫法

1
2
3
4
5
6
bool{
"filter":[],#過濾,不支持權重打分
"must":[],#數組中的查詢必須滿足
"shoul":[],#數組中的查詢滿足一個或者多個
"must_not":[]#數組中一個都不能滿足
}

通過過濾查找salary_min字段等于1800數據,需要查詢某些精確的值建議用term完成

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
GET jobbole/job/_search
{
  "query": {
    "bool": {
      "must": {
          "match_all": {}
        },
      "filter":{
        "term":{
          "salary_min":1800
        }
      }
    }
  }
}

查詢多個并且過濾

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
GET jobbole/job/_search
{
  "query": {
    "bool": {
      "must": {
          "match_all": {}
        },
      "filter":{
        "terms":{
          "salary_min":["1800",1700]
        }
      }
    }
  }
}

這里如果terms查詢過濾條件test字段類型的數據,必須小寫,因為text文檔會被elasticsearch入庫的時候全部改成小寫,match就不會存在這樣問題。

查看分析器解析的內容

1
2
3
4
5
6
7
8
9
10
11
GET _analyze
{
  "analyzer": "ik_max_word",
  "text": "pyton網絡開發工程師"
}

GET _analyze
{
  "analyzer": "ik_smart",
  "text": "pyton網絡開發工程師"
}

結果顯示ik_max_word比ik_smart分詞更加細致,具體看文檔github

查詢工資大于1700或者工作python web開發,排除工作1800

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
GET jobbole/job/_search
{
  "query": {
    "bool": {
      "should": [
        {"term": {
          "salary_min": {
            "value": "1700"
          }
        }},
        {"term": {
            "title": {
              "value": "python web開發"
            }
          }
        }
        ],
      "must_not":{
        "term":{
          "salary_min":1800
        }
      }
    }
  }
}

嵌套查詢,bool里面嵌套bool,查詢title為游戲 or(title為python and salary_min為1500)的數據

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
GET jobbole/job/_search
{
  "query": {
    "bool": {
      "should": [
        {"term": {
          "title": {
            "value": "游戲"
          }
        }},
        {"bool": {
          "must": [
            {"term": {
              "title": {
                "value": "python"
              }
            }},
            {"term": {
              "salary_min": {
                "value": "1500"
              }
            }}
          ]
        }}
      ]
    }
  }
}

查詢非null的數據,如果數據存在null,我們需要過濾掉這些數據,語法如下:

1
2
3
4
5
6
7
8
9
10
11
12
GET jobbole/job/_search
{
  "query": {
    "bool": {
      "filter": {
        "exists": {
          "field": "title"
        }
      }
    }
  }
}

查詢null的數據,反過來,我們需要查詢某個字段為null的數據,就是用must_not

1
2
3
4
5
6
7
8
9
10
11
12
GET jobbole/job/_search
{
  "query": {
    "bool": {
      "must_not": {
        "exists": {
          "field": "title"
        }
      }
    }
  }
}

如果覺得我的文章對您有用,請隨意打賞。您的支持將鼓勵我繼續創作!

發表評論

電子郵件地址不會被公開。 必填項已用*標注