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" }}
]
}