您好,登錄后才能下訂單哦!
這篇文章主要介紹“Elasticsearch基本查詢及組合查詢實例分析”,在日常操作中,相信很多人在Elasticsearch基本查詢及組合查詢實例分析問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Elasticsearch基本查詢及組合查詢實例分析”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
查詢分類:
基本查詢:使用es內置查詢條件進行查詢
組合查詢:把多個查詢組合在一起進行復合查詢
過濾:查詢的同時,通過filter條件在不影響打分的情況下篩選數據
#添加映射 PUT lago { "mappings": { "properties":{ "title":{ "stort":true, "type":"text", "analyzer":"ik_max_word" }, "company_name":{ "stort":true, "type":"keyword", }, "desc":{ "type":"text" }, "comments":{ "type":"integer" }, "add_time":{ "type":"date", "format":"yyy-MM-dd" } } } } #測試數據 POST lago/job { "title":"python django 開發工程師", "company_name":"美團科技有限公司", "desc":"對django熟悉,掌握mysql和非關系型數據庫,網站開發", "comments:200, "add_time":"2018-4-1" } POST lago/job { "title":"python數據分析", "company_name":"百度科技有限公司", "desc":"熟悉python基礎語法,熟悉數據分析", "comments:5, "add_time":"2018-10-1" } POST lago/job { "title":"python自動化運維", "company_name":"上海華為", "desc":"熟悉python基礎語法,精通Linux", "comments:90, "add_time":"2019-9-18" }
GET lagou/job/_search { "query":{ "match":{ "title":"python" } } } #因為title字段做了分詞,python都能搜索出來 #搜索python網站也能搜索出來,把python和網站分成兩個詞 #搜索爬取也能搜索到,把爬和取分詞,去搜索 #只搜取 搜不到
GET lagou/_search { "query":{ "term":{ "title":"python" } } } #會拿著要查詢的詞不做任何處理,直接查詢 #用python爬蟲,查不到,用match就能查到 { "query":{ "term":{ "company_name":"美團" } } } #通過美團,就查詢不到
GET lagou/_search { "query":{ "terms":{ "title":["工程師","django","運維"] } } } #三個詞,只要有一個,就會查詢出來
GET lagou/_search { "query":{ "match":{ "title":"python" } }, "form":1, "size":2 } #從第一條開始,大小為2
GET lagou/_search { "query":{ "match_all":{} } } #所有數據都返回
GET lagou/_search { "query":{ "match_phrase":{ "title":{ "query":"python系統", "slop":6 } } } } #短語查詢, #會把查詢條件python和系統分詞,放到列表中,再去搜索的時候,必須滿足python和系統同時存在的才能搜出來 #"slop":6 :python和系統這兩個詞之間最小的距離
GET lagou/_search { "query":{ "multy_match":{ "query":"python", "fields":["title","desc"] } } } #可以指定多個字段 #比如查詢title和desc這個兩個字段中包含python關鍵詞的文檔 #"fields":["title^3","desc"]:權重,title中的python是desc中的三倍
GET lagou/_search { "query":{ "stored_fields":["title","company_name"] "match":{ "title":"python" } } } #只返回title和company_name字段 #"stored_fields":["title","company_name",'dsc'],不會返回dsc,因為我們要求stroed_fields,之前desc字段設為false(默認),不會顯示
GET lagou/_search { "query":{ "match_all":{} }, "sort":[ { "comments":{ "order":"desc" } } ] } #查詢所有文檔,按comments按desc降序排序
GET lagou/_search { "query":{ "range":{ "comments":{ "gte":10, "lte":20, "boost":2.0 } } } } #指定comments字段大于等于10,小于等于20 #boost:權重 GET lagou/_search { "query":{ "range":{ "add_time":{ "gte":"2019-10-11", "lte":"now", } } } } #對時間進行查詢
GET lagou/_search { "query":{ "wildcard":{ "title":{ "value":"pyth*n", "boost":2.0 } } } } #模糊查詢,title中,有pyth任意值n得都能查出來
exists:字段包含,存在的 # 包含followers_count字段 GET user_toutiao/_search { "query": { "bool": { "must": [ {"exists": { "field": "followers_count" }} ] } } } # 不包含followers_count字段 GET user_toutiao/_count { "query": { "bool": { "must_not": [ {"exists": { "field": "followers_count" }} ] } } } # 不包含followers_count且updata_timestamp>1614221216 GET user_toutiao/_count { "query": { "bool": { "must_not": [ { "exists": { "field": "followers_count" } } ], "must": [ {"range": { "updata_timestamp": { "gt": 1614221216 } }} ] } } }
#bool查詢包括must should must_not filter ''' bool:{ "filter":[], 字段過濾 "must":[], 所有查詢條件都滿足 "should":[], 滿足一個或多個 "must_not":{} 都不滿足于must相反 } ''' # 建立測試數據 POST lago/testjob/_bulk {"index":{"_id":1}} {"salary":10,"title":"Python"} {"index":{"_id":2}} {"salary":20,"title":"Scrapy"} {"index":{"_id":3}} {"salary":30,"title":"Django"} {"index":{"_id":4}} {"salary":30,"title":"Elasticsearch"}
#select * from testjob where salary=20 GET lagou/testjob/_search { "query":{ "bool":{ "must":{ "match_all":{} }, "filter":{ "term":{ "salary":20 } } } } }
#查詢薪資是10k或20k的 GET lagou/testjob/_search { "query":{ "bool":{ "must":{ "match_all":{} }, "filter":{ "terms":{ "salary":[10,20] } } } } } #select * from testjob where title="python" GET lagou/testjob/_search { "query":{ "bool":{ "must":{ "match_all":{} }, "filter":{ "term":{ "title":"Python" } } } } } #title 是text字段,會做大小寫轉換,term不會預處理,拿著大寫Python去查查不到 #可以改成小寫,或者用match來查詢 ''' "filter":{ "match":{ "title":"Python" } } ''' #查看分析器解析結果 GET _analyze { "analyzer":"ik_max_word", "text":"python網絡開發工程師" }
#select * from testjob where (salary=20 or title=Python) and (salary!=30) #查詢薪資等于20k或者工作為python的工作,排除價格為30k的 { "query":{ "bool":{ "should":[ {"term":{"salary":20}}, {"term":{"title":"python"}} ], "must_not":{ "term":{"salary":30} } } } } #select * from testjob where title=python or (title=django and salary=30) { "query":{ "bool":{ "should":[ {"term":{"title":"python"}}, { "bool":{ "must":[ {"term":{"title":"django"}}, {"term":{"salary":30}} ] } } ] } } }
到此,關于“Elasticsearch基本查詢及組合查詢實例分析”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。