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