短語匹配故名思意就是對分詞後的短語就是匹配,而不是僅僅對單獨的單詞進行匹配
下面就是根據下面的腳本例子來看整個短語匹配的有哪些做用和優勢html
GET /my_index/my_type/_search { "query": { "match_phrase": { "title": "quick brown fox" } } } //查詢分詞以後連續的 //例如 brown fox 能夠查詢到,可是quick fox 查詢不到 //也可使用下面的方式,這兩種方式是相同的,只不過寫法不一樣而已 POST /product/_search { "query": { "match": { "name":{ "query": "1130 對接", "type": "phrase" } } } }
根據上面的咱們對短語匹配有些總結curl
對 短語查詢進行一些優化
經過加入slop參數,能夠靈活的控制短語查詢的,
slop 參數告訴 match_phrase 查詢詞條相隔多遠時仍然能將文檔視爲匹配elasticsearch
POST product/_search { "query": { "match_phrase": { "name": { "query": "1130 對接 測試", "slop" : 10 } } } }
越近越好,當咱們給一個短語查詢設置了很高的額slop時,就像下面這樣分佈式
POST product/_search { "query": { "match_phrase": { "name": { "query": " 上海 自由行", "slop" : 100 } } } } //可是雖然咱們給了很高的slop值,咱們能夠根據返回的score分數值來進行判斷幾個字段是否更加的臨近。
prefix 前綴查詢
前綴查詢,就是將一個詞從頭開始查。 例如某個數據是上海一日遊 可利用前綴查詢查詢 上海學習
POST /product/_search { "query": { "prefix": { "departureCitys": { "value": "上" } }· } }
prefix 前綴查詢,不會在搜索的時候分析字符串,它假定傳入的字符串就是正要查詢的前綴
默認狀態下, prefix 查詢不作相關度評分計算,它只是將全部匹配的文檔返回,併爲每條結果賦予評分值 1 測試
POST /product/_search { "explain": true, "size": 1, "query": { "match": { "name": "三亞" } } }
match_phrase_prefix 查詢, 短語查詢和前綴查詢的組合優化
GET /product/_search { "query": { "match_phrase_prefix": { "name": { "query": "上 海", "slop" : 20, "max_expansions": 50 } } } }
slop 來使整個詞序位置不是那麼的嚴格
參數 max_expansions 控制着能夠與前綴匹配的詞的數量ui
- ES默認窗口10000。能夠用修改index.max_result_window參數來解決問題 - curl -XPUT http://127.0.0.1:9200/product/_settings -d '{ "index" : { "max_result_window" : 100000}}'