ElasticSearch英文基本查询
生活随笔
收集整理的這篇文章主要介紹了
ElasticSearch英文基本查询
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
本章內容概述
1、基本查詢(QUERY查詢) 2、結構化查詢1、基本查詢(QUERY查詢)
1.1 數據準備
先插入數據,以備測試使用 ### 創建索引 PUT /lib3PUT /lib3/user/1 {"name":"zhaoliu","address":"hei long jiang tie ling shi","age":50,"birthday":"1970-12-12","interests":"hejiu,duanlian,lvyou" }PUT /lib3/user/2 {"name":"zhaoming","address":"bei jing shi hai dian qu","age":20,"birthday":"1998-10-12","interests":"hejiu,changge,wanyouxi" }PUT /lib3/user/3 {"name":"lisi","address":"bei jing shi chao yang qu","age":28,"birthday":"1990-01-11","interests":"biancheng,shuijiao,wanyouxi" }PUT /lib3/user/4 {"name":"wangwu","address":"bei jing shi fang shan qu","age":26,"birthday":"1993-01-11","interests":"changge,tingyinyue,wanyouxi" }PUT /lib3/user/5 {"name":"zhangsan","address":"zheng zhou shi er qi qu","age":32,"birthday":"1988-05-11","interests":"tiaowu,tingyinyue" }1.2 基本條件查詢
根據id進行查詢 GET /lib3/user/id值[比如7] 查詢當前所有類型的文檔 GET /lib3/user/_search 根據多個ID批量查詢 GET /lib3/user/_mget{"ids":["3","5"]} 根據姓名查詢GET /lib3/user/_search?q=name:li siGET /lib3/user/_search?q=interests:跳舞 查詢不到內容根據年齡查詢:查詢年齡21GET /lib3/user/_search?q=age:21 根據年齡區間查詢:查詢年齡30歲-60歲之間GET /lib3/user/_search?q=age[30 TO 60]注意:TO 一定要大寫 根據年齡區間查詢,并且降序排列:查詢年齡30歲-60歲之間 并且年齡降序GET /lib3/user/_search?q=age[30 TO 60]&sort=age:desc1.3 控制查詢返回數量
根據年齡區間查詢,降序排列并展示指定數據[分頁]:查詢年齡30歲-60歲之間 并且年齡降序、從0開始,顯示2條數據GET /lib3/user/_search?q=age[30 TO 60]&sort=age:desc&from=0&size=1 根據年齡區間查詢,降序排列并展示指定數據[分頁],展示直接列:查詢年齡30歲-60歲之間 并且年齡降序、從0開始,顯示2條數據, 展示name和age字段GET /lib3/user/_search?q=age[30 TO 60]&sort=age:desc&from=0&size=2&_source=name,age2、結構化查詢
ES中的查詢請求有兩種方式,一種是簡易版的查詢,另外一種是使用JSON完整的請求體,叫做結構化查詢(DSL)。由于DSL查詢更為直觀也更為簡易,所以大都使用這種方式。DSL查詢是POST過去一個json,由于post的請求是json格式的,所以存在很多靈活性,也有很多形式。2.1 查詢案例
2.1.1 term查詢
term query 會去倒排索引中尋找確切的term,不進行分詞器分析,文檔中必須包含整個搜索的詞匯,這種查詢適合keyword,mumeric date等。1、根據名稱精確查詢姓名 GET /lib3/user/_search {"query": {"term": {"name": "li si"}} } "query":{} 定義查詢條件"term":{} 定義精確查詢"name": "li si" 定義精確查詢的字段和對應值2、根據愛好查詢 GET /lib3/user/_search {"query":{"term":{"interests":"changge"}} }2.1.2 terms查詢
terms: 查詢某個字段中含有多個關鍵詞的文檔1、查詢愛好包含hejiu 或 changge的 GET /lib3/user/_search {"query":{"terms":{"interests":["changge","hejiu"]}} } 只要包含關鍵詞的一個,都會被查詢出來2.1.3 match模糊查詢
match query 知道分詞器的存在,會對字段進行分詞操作,然后再查詢1、根據名稱模糊查詢 GET /lib3/user/_search {"query": {"match": {"name": "zhaoming zhaoliu"}} } "match":{} 定義模糊查詢,類似于likematch查詢相當于模糊匹配,只包含其中一部分關鍵詞就行2、多條件模糊查詢 multi_match GET /lib3/user/_search {"query": {"multi_match": {"query": "changge","fields": ["interests","name"]}} } "query" 后面是跟要查詢的內容"fields" 要查詢的字段2.1.4 結構化分頁查詢
1、分頁查詢 GET /lib3/user/_search {"from": 0,"size": 2, "query": {"match": {"interests": "changge"}}} "from" 開始下標"size" 數量注:類似于limit限定查詢2.1.5 控制顯示字段
我們之前的查詢是把所有的字段都顯示出來,我們可以通過_source來控制要顯示的字段: GET /lib3/user/_search {"_source":["name","interests"],"query":{"match":{"interests":"changge"}} } 也可以通過includes和excludes來實現: GET /lib3/user/_search {"_source":{"includes": ["name","interests"],"excludes": ["birthday","age"]},"query":{"match":{"interests":"changge"}} } 也可以使用通配符來匹配指定的字段: GET /lib3/user/_search {"_source":{"includes": "a*", "excludes": ["name","birthday"]},"query":{"match":{"interests":"changge"}} }2.1.6 排序
使用sort實現排序, desc 降序 asc 升序 GET /lib3/user/_search {"sort": [{"age": {"order": "asc"}}]}2.1.7 前綴匹配
匹配以指定前綴開始的字段 GET /lib3/user/_search {"query": {"match_phrase_prefix": {"name": "zhao"}} }2.1.8 范圍查詢
根據生日范圍查詢 GET /lib3/user/_search {"query": {"range": {"birthday": {"gte": "1990-10-10","lte": "2018-05-01"}}} } 當然,也有人喜歡使用from to GET /lib3/user/_search {"query": {"range": {"birthday": {"from": "1990-10-10","to": "2018-05-01"}}} } 我們可以設置是否包含最大或最小 GET /lib3/user/_search {"query": {"range": {"age": {"gte": 20,"lte": 32,"include_lower":true,"include_upper":false}}} } gt 相當于 >lt 相當于 <gte 相當于 >=lte 相當于 <=2.1.9 wildcard查詢
允許使用通配符*和?來進行查詢* 代表0個或多個字符? 代表任意一個字符查詢姓名以zhao開頭后面任意的 GET /lib3/user/_search {"query": {"wildcard": {"name": "zhao*"}} } 查詢前面是li第三個字符任意,第四個字符是i的 GET /lib3/user/_search {"query": {"wildcard": {"name": "li?i*"}} }2.1.10 fuzzy實現模糊查詢
當我們對于字段值不太記得時,我們可以通過fuzzy進行大致查詢,找到對應匹配的值 GET /lib3/user/_search {"query": {"fuzzy": {"name": "zholiu"}} }GET /lib3/user/_search {"query": {"fuzzy": {"interests": {"value":"change"}}} }2.1.11 高亮搜索結果
GET /lib3/user/_search {"query":{"match":{"interests":"changge"}},"highlight": {"fields": {"interests": {}}} } 更多Kibana查詢請參考: http://www.mamicode.com/info-detail-2107610.html2.2 term與match區別
term查詢不會對字段進行分詞查詢,會采用精確匹配。match會根據該字段的分詞器,進行分詞查詢。ib3/user/_search
{
“query”: {
“fuzzy”: {
“interests”: {
“value”:“change”
}
}
}
}
GET /lib3/user/_search
{
“query”:{
“match”:{
“interests”:“changge”
}
},
“highlight”: {
“fields”: {
“interests”: {}
}
}
}
總結
以上是生活随笔為你收集整理的ElasticSearch英文基本查询的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 没有光驱,你能装系统吗?
- 下一篇: 网银测试软件,光大银行网盾检测工具