Elasticsearch查詢語句

下面的查詢語句都是在 Elasticsearch-head中執行。

先往elsearch中添加一些數據

{

"name":"aaa",

"sex":1,

"address":"西安"

}

{

"name":"bbb",

"sex":1,

"address":"深圳"

}

{

"name":"ccc",

"sex":2,

"address":"北京"

}

{

"name":"ddd",

"sex":2,

"address":"上海"

}

Elasticsearch查詢語句

1.matcch_all 查詢

match_all查詢是elsearch最簡單的查詢,它用來匹配elsearch中所有的文檔,具體命令如:

{

"query":{

"match_all":{}

}

}

將命令在head插件中直接插件,結果如圖:

Elasticsearch查詢語句

2.term查詢

term查詢是在索引中搜索與輸入查詢條件完全匹配的文檔

{

"query": {

"term": {

"name": "aaa"

}

}

}

執行結果如下:

Elasticsearch查詢語句

這裡說明一下中文搜索的問題。上面的搜索,是根據名字來搜索,是字母,沒有中文,如果用相同的語句來搜索address,就沒有結果。

{

"query": {

"term": {

"address": "西安"

}

}

}

Elasticsearch查詢語句

這是因為:elasticsearch 裡默認的IK分詞器是會將每一箇中文都進行了分詞的切割,所以你直接想查一整個詞,或者一整句話是無返回結果的。

可以將搜索改為

{

"query": {

"term": {

"address.keyword": "西安"

}

}

}

就可以得到我們想要的結果。

Elasticsearch查詢語句

3.boolean查詢

boolean查詢允許我們模擬AND和OR操作,可以使用MUST,MUST_NOT和SHOULD操作符來構造boolean查詢。MUSH和MUST_NOT負責過濾出結果集中滿足和不滿足條件的數據。默認情況下,SHOULD要檢查它的多個條件中至少滿足一個才會返回數據。

比如查詢 sex=1的用戶:

{

"query":{

"bool":{

"must":{

"term":{"sex":1}

}

}

}

}

Elasticsearch查詢語句

查詢sex=1且不在西安的用戶:

Elasticsearch查詢語句

查詢sex=1,地址在西安或者深圳的用戶:

{

"query": {

"bool": {

"must": {

"term": {

"sex": 1

}

},

"should": [

{

"term": {

"address.keyword": "西安"

}

},

{

"term": {

"address.keyword": "深圳"

}

}

]

}

}

}

Elasticsearch查詢語句

4.match查詢

查詢與搜索條件匹配的文檔,默認情況下,match查詢是一個使用了or操作符的boolean類型的查詢

如查詢 address 是 西安 或者 深圳 的用戶

{

"query": {

"match": {

"address": {

"query": "西安 深圳"

}

}

}

}

Elasticsearch查詢語句

5.range查詢

range查詢半按照指定字段值的範圍進行匹配。我們可以使用gt,gte,lt,lte操作符來定義這個範圍。這幾個操作符分別表示:大於,大於等於,小於,小於等於

比如,查詢sex大於1的數據:

{

"query": {

"range": {

"sex" : {

"gt" : 1

}

}

}

}

Elasticsearch查詢語句

查詢大於等於2且小於5的數據

{

"query": {

"range": {

"sex": {

"gte": 2,

"lt": 5

}

}

}

}

由於我們測試數據的問題,這裡還只會列出來大於等於2的數據。

6.wildcard查詢

wildcard查詢是在字段上使用通配符表達式來進行查詢。你可以使用 * 匹配不限數量的所有字符,? 可以匹配所有字符,與 * 不同的是它只能匹配單個字符

比如:查詢name以a開頭的用戶:

{

"query": {

"wildcard": {

"name": {

"value": "a*"

}

}

}

}

Elasticsearch查詢語句

如果將上面查詢語句中的 * 改為 ? ,就匹配不到結果

Elasticsearch查詢語句

因為?只匹配單個字符。

上面只是一些基本的查詢類型,elsearch還支持更多不同類型的查詢,以後有機會再補充。


分享到:


相關文章: