本節主要講解 Elasticsearch 的 搜索相關功能 Search-API,講解什麼是 URL Search 和 Request Body Search 的語法,對經常使用的語法都會一一進行詳細介紹。html
1.Search APIless
Search API 分爲兩大類一個是 URL Search 和 Request Body Search。學習
URL Search3d
Request Body Searchcode
2.URL Searchorm
GET /movies/_search?q=love&df=title&sort=year:desc&from=0&size=10&timeout=1s { "profile":"true" }
2.1Query String Syntaxhtm
2.1.1TermQueryblog
GET /movies/_search?q=title:(Beautiful Mind) { "profile":"true" }
輸出爲有 Beautiful 或者 Mind 的電影名稱排序
2.1.2PhraseQuery索引
GET /movies/_search?q=title:"Beautiful Mind" { "profile":"true" }
輸出爲按照順序同時出現 "Beautiful Mind" 這個詞語的電影名稱
TermQuery 必須帶有 () ,好比 (Beautiful Mind),不帶的狀況是不同的。
GET /movies/_search?q=title:(Beautiful Mind)
Mind 爲泛查詢,對全部字段都進行查詢
2.1.3布爾查詢
GET /movies/_search?q=title:(Beautiful OR Mind) { "profile":"true" }
裏面執行是 BooleanQuery,最後仍是以 TermQuery 進行分組查詢。
2.1.4範圍查詢
GET /movies/_search?q= year:[2018 TO 2019] { "profile":"true" }
2.1.5算數查詢
GET /movies/_search?q=year:>=2018 { "profile":"true" }
2.1.6通配符和正則匹配
GET /movies/_search?q=title:b*
2.1.7模糊查詢
GET /movies/_search?q=title:"Avengers War"~2
3.Request Body Search
其實在高階使用方法上只有 Request Body Search 才能實現,因此也是推薦使用這種方法查詢學習。
Request Body Search 將查詢語句經過經過 HTTP 方式發送到 ES,進行查詢
3.1Query DSL
POST kibana_sample_data_ecommerce/_search { "profile": true, "_source":["customer_first_name","customer_full_name","customer_gender"], "from":10, "size":20, "sort":[{"order_date":"desc"}], "query": { "match_all": {}//查詢全部文檔 } }
3.2腳本字段
腳本字段簡單說經過 ES 的 painless 腳本去算出一個新的字段。這個有什麼用處呢?當你要對一個列排序,發現存儲的有不一樣的單位,須要轉換以後才能作一個統一的排序。
GET kibana_sample_data_ecommerce/_search { "script_fields": { "new_field": { "script": { "lang": "painless", "source": "doc['customer_id']+'_2333333!'" } } }, "query": { "match_all": {} } }
腳本字段不要選擇文本類型,默認禁止,能夠經過設置 fielddata = true 開啓,不建議。
3.3Match 查詢表達式
前面 URL Search 中講解 Term 和 Phrase 查詢,如今咱們來看在 Request Body Search 是怎麼實現。
POST movies/_search { "query": { "match": { "title": "Who Last" } } }
若是你要要求 Who Last 要同時出現,增長 "operator": "and" 實現。
POST movies/_search { "query": { "match": { "title": { "query": "Who Christmas", "operator": "and" } } } }
3.4Match Phrase
POST movies/_search { "query": { "match_phrase": { "title": { "query": "Who Christmas" } } } }
POST movies/_search { "query": { "match_phrase": { "title": { "query": "Who Christmas", "slop": 1 } } } }
4.小結
本篇主要對 Search-Api 的 URL Search 和 Request Body Search 詳細介紹,URL Search 和 Request Body Search 均可以簡單方便查詢咱們想要的結果, 那麼咱們應該採用哪一種方式進行查詢呢?在簡單的進行查詢兩種方式沒有什麼區別,可是在 ES 中高級使用方法只能在 Request Body Search 中作,全部這裏也是推薦學習和使用這種方法,對 Request Body Search 高階使用的方法會在以後的章節進行講解。
5.數據來源
kibana_sample_data_ecommerce 索引是 kibana 自帶的索引,須要手動在 kibana 進行點擊導入
movies 索引是 movielens 數據集,經過https://grouplens.org/datasets/movielens/ 這個地址下載。經過 Logstash 導入。logstash.conf 和 數據文件在公衆號後臺回覆 ES 獲取。
【Elasticsearch 7 探索之路】(四)Analyzer 分析 【Elasticsearch 7 探索之路】(三)倒排索引 【Elasticsearch 7 探索之路】(二)文檔的 CRUD 和批量操做 【Elasticsearch 7 搜索之路】(一)什麼是 Elasticsearch?
原文出處:https://www.cnblogs.com/TFengStorm/p/12026562.html