網(wǎng)站建設(shè)實用教程企業(yè)郵箱申請
es基本用法-查詢api
-
- 說明
- 查詢所有
- 某一字段匹配查詢
- 多字段查詢
- bool查詢
- 范圍查詢
- 精確查詢
- 正則匹配
- 模糊查詢
- 結(jié)果處理
說明
es對數(shù)據(jù)的檢索,總結(jié)下來就是兩部分,即查詢和處理。查詢指的是查找符合條件的數(shù)據(jù),包括查詢所有、匹配查詢、布爾查詢、范圍查詢、模糊查詢等等。處理指的是對查詢到的數(shù)據(jù)做進一步處理,包括是否分頁、是否排序、是否聚合、是否分組、是否只返回部分字段等等。es的api就是對這兩部分的不同組合。舉例如下,數(shù)據(jù)集使用上一篇創(chuàng)建的bank索引。
查詢所有
GET /bank/_search
{"query":{"match_all": {}}
}
某一字段匹配查詢
這塊的查詢已經(jīng)涉及到了分詞,指的是查詢address中包含Place或National的文檔。針對分詞查詢后面會進一步做深入講解。
GET /bank/_search
{"query": {"match": {"address": "Place National"}}
}
多字段查詢
multi_match用在多字段查詢中,下面的語句表示,只要address或city中,包含mill和urie其中的一個,就算是命中查詢。用sql語句表示: select * from bank where (address like ‘%mill%’ or like ‘%urie%’) or (citylike ‘%mill%’ or like ‘%urie%’)
GET /bank/_search
{"query":{"multi_match": {"query": "mill urie","fields": ["address","city"]}}
}
bool查詢
bool查詢主要用到三個關(guān)鍵字:must、must_not、should。在mysql中,就是and、not、or的概念。
其中,must表示必須包含,must_not表示一定不能包含,should表示可以包含,也可以不包含。包含的話,排名要比不包含的靠前。
GET /bank/_search
{"query": {"bool": {"must": [{"match": {"gender": "M"}},{"match": {"address": "mill"}}],"must_not": [{"match": {"age": "18"}}],"should": [{"match": {"lastname": "Wallace"}}]}}
}
范圍查詢
在范圍查詢中,使用的關(guān)鍵詞有range、filter,以及表示大于小于的gt、lt、gte、lte。
關(guān)鍵字 | 含義 |
---|---|
gt | 大于 |
lt | 小于 |
gte | 大于等于 |
lte | 小于等于 |
- rang方式
GET /bank/_search
{"query": {"range": {"age": {"gte": "20","lte": "25"}}}
}
- filter方式
GET /bank/_search
{"query": {"bool": {"must": [{"match": {"gender": "M"}},{"match": {"address": "mill"}}],"filter": [{"range": {"age": {"gte": 10,"lte": 50}}},{"range": {"balance": {"gte": 9812,"lte": 9813}}}]}}
}
精確查詢
精確查詢可以簡單理解為完全匹配查詢,用term關(guān)鍵字。在數(shù)值型查詢中經(jīng)常用到,而在文本中查詢使用,是表示查詢時不進行分詞,剛好和分詞查詢關(guān)鍵字match對立。
1.查詢單個
GET /bank/_search
{"query": {"match": {"age": 33}}
}
2.查詢多個,此時用terms
GET /bank/_search
{"query": {"terms": {"balance": ["34487","29104"]}}
}
2.查詢多個,也可以用另外一種方式:should+term
GET /bank/_search
{"query": {"bool": {"should": [{"term": {"balance": "34487"}},{"term": {"balance": "29104"}}]}}
}
正則匹配
GET /bank/_search
{"query": {"wildcard": {"firstname": "*amber"}}
}
模糊查詢
GET /bank/_search
{"query": {"fuzzy": {"firstname": "hol"}}
}
上述只羅列了常用的查詢,除此之外,還有很多其他查詢,這里不做演示,感興趣的小伙伴可以自己查找下。
結(jié)果處理
開頭我們也說了,es對數(shù)據(jù)的處理就兩部分,查詢和處理。上面介紹了查詢,現(xiàn)在我們介紹下基本的處理:分頁、排序、返回部分字段。
關(guān)鍵字 | 含義 |
---|---|
sort | desc/asc |
from | 頁數(shù),從0開始 |
size | 每頁大小 |
_source | 只返回需要的字段,可以羅列字段,也可以用通配符 |
GET /bank/_search
{"query": {"match": {"address": "Hendrickson"}},"sort": [{"balance": "desc"}],"from": 0,"size": 5,"_source": ["balance","account_number","address"]
}
GET /bank/_search
{"query": {"match": {"address": "Hendrickson"}},"sort": [{"balance": "asc"}],"from": 0,"size": 5,"_source":{"includes": "addr*","excludes": ["name","bir*"]}
}