您好,登錄后才能下訂單哦!
這篇“Elasticsearch聚合查詢及排序的方法”文章的知識點大部分人都不太理解,所以小編給大家總結了以下內容,內容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“Elasticsearch聚合查詢及排序的方法”文章吧。
# 1 排序 GET jeff/doc/_search { "query": { "match": { "from": "gu" } }, "sort": [ { "age": { "order": "desc" } } ] } # 升序 GET jeff/doc/_search { "query": { "match": { "from": "gu" } }, "sort": [ { "age": { "order": "asc" } } ] } # 并不是所有類型都支持排序(只允許數字類型做排序) GET jeff/doc/_search { "query": { "match": { "from": "gu" } }, "sort": [ { "name": { "order": "asc" } } ] }
# match和match_all的區別? mach表示要查詢,根據字段查,match_all查所有 GET jeff/doc/_search { "query": { "match_all": {} } }
GET jeff/doc/_search { "query": { "match_all": {} }, "sort": [ { "age": { "order": "desc" } } ], "from": 2, "size": 1 } # "from": 2,代表從第二條開始, 取一條"size": 1 # 有了這個查詢,如何分頁? 一頁有10條數據 第一頁: "from": 0, "size": 10 第二頁: "from": 10, "size": 10 第三頁: "from": 20, "size": 10
# 多個條件,and ,or ,not # 對到es中就是布爾查詢,must,should,must_not,filter must --- and should --- or must_not --- not filter --- 過濾 # 1 組合查詢之must # 查詢form gu和age=30的數據 GET gyy/doc/_search { "query": { "bool": { "must": [ { "match": { "from": "gu" } }, { "match": { "age": "30" } } ] } } } # 查詢form gu數據() GET gyy/doc/_search { "query": { "bool": { "must": [ { "match": { "from": "gu" } } ] } } } # 同上 GET gyy/doc/_search { "query": { "match": { "from": "gu" } } } # 2 組合查詢之should,或者的條件 GET gyy/doc/_search { "query": { "bool": { "should": [ { "match": { "from": "gu" } }, { "match": { "tags": "閉月" } } ] } } } # 3 組合查詢之must_not 取反 GET gyy/doc/_search { "query": { "bool": { "must_not": [ { "match": { "from": "gu" } }, { "match": { "tags": "可愛" } }, { "match": { "age": 18 } } ] } } } # `filter`條件過濾查詢,過濾條件的范圍用`range`表示,`gt`表示大于,大于多少呢 # gt:大于 lt:小于 get:大于等于 let:小于等于 GET gyy/doc/_search { "query": { "bool": { "must": [ { "match": { "from": "gu" } } ], "filter": { "range": { "age": { "gt": 25 } } } } } } # 查詢年齡小于等于18的所有數據 GET gyy/doc/_search { "query": { "bool": { "filter": { "range": { "age": { "lte": 18 } } } } } }
# 對結果進行過濾,類似于如下 select * from user; select name,age from user; # 對應到es的查詢 GET gyy/doc/_search { "query": { "match": { "name": "顧老二" } }, "_source": ["name", "age"] }
# 3 結果高亮顯示(默認情況) GET gyy/doc/_search { "query": { "match": { "name": "石頭" } }, "highlight": { "fields": { "name": {} } } } # 定制高亮顯示的樣式 GET gyy/chengyuan/_search { "query": { "match": { "from": "gu" } }, "highlight": { "pre_tags": "<b class='key' style='color:red'>", "post_tags": "</b>", "fields": { "from": {} } } }
小結:
混合開發,你知道怎么處理
前后端分離,你怎么處理?
<b class='key' style='color:red'>串直接以josn格式返回,前端自行渲染
用的最多就是match+布爾+高亮+分頁
# 聚合查詢 # 1 聚合查詢之avg select max(age) as my_avg from user; GET gyy/doc/_search { "query": { "match": { "from": "gu" } }, "aggs": { "my_avg": { "avg": { "field": "age" } } }, "_source": ["name", "age"] } # 2 聚合查詢之max,size=0表示不取數據,只要max的結果 GET gyy/doc/_search { "query": { "match": { "from": "gu" } }, "aggs": { "my_max": { "max": { "field": "age" } } }, "size": 0 } # 3 聚合之min GET gyy/doc/_search { "query": { "match": { "from": "gu" } }, "aggs": { "my_min": { "min": { "field": "age" } } }, "size": 0 } # 4 聚合查詢之sum GET gyy/doc/_search { "query": { "match": { "from": "gu" } }, "aggs": { "my_sum": { "sum": { "field": "age" } } }, "size": 0 } # 5 聚合之分組 GET gyy/doc/_search { "size": 0, "query": { "match_all": {} }, "aggs": { "age_group": { "range": { "field": "age", "ranges": [ { "from": 15, "to": 20 }, { "from": 20, "to": 25 }, { "from": 25, "to": 30 } ] } } } }
GET _template/user_instagram # 查看模版 PUT _template/user_instagram # 修改模版 {跟字段信息數據} GET user_instagram/_mapping # 查看索引信息 PUT user_instagram/_mapping # 修改索引信息 {跟字段信息數據}
模版中如果有name字段,存的時候會在索引中自動匹配
模版中如果沒有age字段,存的時候索引找不到字段,存不進去。
需要現在模版中添加字段,再到索引中添加字段,索引生成之后需要手動添加字段,不會自動生成
# 查看索引信息---》mapping字典---》映射(類型,表類型,表結構) GET user_instagram/_mapping # 6.x以后一個索引只能有一個映射類型(只能有一個表) # 創建映射 # 創建索引,并設置映射 PUT _template/user_instagram { "order" : 1, "index_patterns" : [ "user_instagram-v1_0" ], "settings" : { "index" : { "default_pipeline" : "auto_timestamp_pipeline", "mapping" : { "total_fields" : { "limit" : "10000" } }, "refresh_interval" : "600s", "number_of_shards" : "8", "number_of_replicas" : "0", "max_inner_result_window" : "50000" } }, "mappings" : { "_meta" : { "software_version_mapping" : "1.0" }, "dynamic" : "strict", "properties" : { "is_private" : { "type" : "boolean" }, "full_name" : { "type" : "text" }, "create_time" : { "type" : "date" }, "avatar_url" : { "type" : "text" }, "user_id" : { "eager_global_ordinals" : true, "type" : "keyword" }, "follower_num" : { "type" : "integer" }, "following_num" : { "type" : "integer" }, "post_count" : { "type" : "integer" }, "nickname" : { "type" : "text", "fields" : { "keyword" : { "ignore_above" : 256, "type" : "keyword" } }, "doc_values" : false }, "requested_by_viewer" : { "type" : "boolean" }, "is_verified" : { "type" : "boolean" }, "followed_by_viewer" : { "type" : "boolean" } } }, "aliases" : { "user_instagram" : { } } } # 插入測試數據 PUT books/_doc/1 { "title":"大頭兒子小偷爸爸", "price":100, "addr":"北京天安門", "company":{ "name":"我愛北京天安門", "company_addr":"我的家在東北松花江傻姑娘", "employee_count":10 }, "publish_date":"2019-08-19" } PUT books/_doc/2 { "title":"白雪公主和十個小矮人", "price":"99", "addr":"黑暗森里", "company":{ "name":"我的家鄉在上海", "company_addr":"朋友一生一起走", "employee_count":10 }, "publish_date":"2018-05-19" } PUT books/_doc/3 { "title":"白雪公主和十個小矮人", "price":"99", "addr":"黑暗森里", "age":18 } # 查看映射 GET books GET books/_mapping
映射是什么?映射有什么用? 規定了表結構(不是強制的),規定了哪個字段是可以用來全文檢索,是否是數字類型,布爾類型
mapping類型一旦確定,以后就不能修改了,但是可以插入字段
# 全文檢索,有了映射,決定了我可以對某個字段做全文檢索 # es默認分詞對英文友好,使用中文分詞器(es的插件),ik(作者,中國人,elasticsearch開源社區負責人) # 是es的一個插件(es如何安裝插件) #第一種:命令行(內置插件) bin/elasticsearch-plugin install analysis-smartcn 安裝中文分詞器 #第二種:url安裝(第三方插件) bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.5.0/elasticsearch-analysis-ik-7.5.0.zip #第三種:手動安裝(推薦用) #下載,解壓到es的plugins路徑下,重啟es即可 #注意:ik分詞器跟es版本一定要對應 # 兩種分詞方式 # ik_smart:分詞分的 # ik_max_word :分詞分的多 # ik_smart分的詞少,粒度大 GET _analyze { "analyzer": "ik_smart", "text": "上海自來水來自海上" } # ik_smart分的詞多,粒度小 GET _analyze { "analyzer": "ik_max_word", "text": "上海自來水來自海上" } # 在創建映射的時候配置 # 以后你的操作: #文章標題:ik_max_word #文章內容:ik_smart #摘要 #作者 #創建時間
# match:我們今天出去玩 ----》分詞---》按分詞去搜 #term:我們今天出去玩---》直接拿著[我們今天出去玩]--->去索引中查詢 # 查不到內容,直接拿著 Python爬蟲 去查,因為沒有索引,所以查不到 GET books/_search { "query":{ "term":{ "title":"Python爬蟲" } } } # 能查到,而且帶python的都查出來了 # Python 爬蟲 分了詞,分別拿著這兩個詞去查,帶python關鍵字,帶爬蟲關鍵字都能查到 GET books/_search { "query":{ "match":{ "title":"Python爬蟲" } } }
以上就是關于“Elasticsearch聚合查詢及排序的方法”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。