天天看點

ElasticSearch基礎入門(三)進階查詢、過濾、排序一、進階查詢二、過濾(filter)三、排序

ElasticSearch基礎入門(三)進階查詢、過濾、排序

  • 一、進階查詢
    • 1. 布爾查詢(bool)
    • 2. 範圍查詢(range)
    • 3. 模糊查詢(fuzzy)
  • 二、過濾(filter)
  • 三、排序
    • 1. 單字段排序
    • 2. 多字段排序

一、進階查詢

1. 布爾查詢(bool)

bool

把各種其它查詢通過

must

(與)、

must_not

(非)、

should

(或)的方式進行組合。

GET /yoshop/_search
{
    "query":{
        "bool":{
        	"must":     { "match": { "title": "大米" }},
        	"must_not": { "match": { "title":  "電視" }},
        	"should":   { "match": { "title": "手機" }}
        }
    }
}
           

2. 範圍查詢(range)

range

查詢找出那些落在指定區間内的數字或者時間。

GET /heima/_search
{
    "query":{
        "range": {
            "price": {
                "gte":  1000.0,
                "lt":   2800.00
            }
    	}
    }
}
           

3. 模糊查詢(fuzzy)

fuzzy

查詢是

term

查詢的模糊等價。它允許使用者搜尋詞條與實際詞條的拼寫出現偏差,但是偏差的編輯距離不得超過2。

GET /youshop/_search
{
  "query": {
    "fuzzy": {
      "title": "applo"
    }
  }
}
           

上面的查詢,也能查詢到apple手機

我們可以通過

fuzziness

來指定允許的編輯距離。

GET /youshop/_search
{
  "query": {
    "fuzzy": {
        "title": {
            "value":"appla",
            "fuzziness":1
        }
    }
  }
}
           

二、過濾(filter)

filter

方式是在查詢結果中進行過濾的,不會影響評分。

GET /youshop/_search
{
    "query":{
        "bool":{
        	"must":{ "match": { "title": "小米手機" }},
        	"filter":{
                "range":{"price":{"gt":3000,"lt":3800.00}}
        	}
        }
    }
}
           

注意:

filter

中還可以再次進行

bool

組合條件過濾。

三、排序

1. 單字段排序

sort

可以讓我們按照不同的字段進行排序,并且通過

order

指定排序的方式。

GET /youshop/_search
{
  "query": {
    "match": {
      "title": "小米手機"
    }
  },
  "sort": [
    {
      "price": {
        "order": "desc"
      }
    }
  ]
}
           

2. 多字段排序

假定我們想要結合使用

price

_id

進行查詢,并且比對的結果首先按照價格排序,然後按照相id排序。

GET /goods/_search
{
    "query":{
        "bool":{
        	"must":{ "match": { "title": "小米手機" }},
        	"filter":{
                "range":{"price":{"gt":2000,"lt":3000}}
        	}
        }
    },
    "sort": [
      { "price": { "order": "desc" }},
      { "_id": { "order": "desc" }}
    ]
}
           

繼續閱讀