ElasticSearch 學習記錄之ES短語匹配基本用法

ElasticSearch 系列文章

1 ES 入門之一 安裝ElasticSearcha

2 ES 記錄之如何建立一個索引映射

3 ElasticSearch 學習記錄之Text keyword 兩種基本類型區別

4 ES 入門記錄之 match和term查詢的區別

5 ElasticSearch 學習記錄之ES幾種常見的聚合操做

6 ElasticSearch 學習記錄之父子結構的查詢

7 ElasticSearch 學習記錄之ES查詢添加排序字段和使用missing或existing字段查詢

8 ElasticSearch 學習記錄之ES高亮搜索

9 ElasticSearch 學習記錄之ES短語匹配基本用法

10 ElasticSearch 學習記錄之 分佈式文檔存儲往ES中存數據和取數據的原理

11 ElasticSearch 學習記錄之集羣分片內部原理

12 ElasticSearch 學習記錄之ES如何操做Lucene段

13 ElasticSearch 學習記錄之如任何設計可擴容的索引結構

14 ElasticSearch之 控制相關度原理講解







短語匹配

短語匹配故名思意就是對分詞後的短語就是匹配,而不是僅僅對單獨的單詞進行匹配
下面就是根據下面的腳本例子來看整個短語匹配的有哪些做用和優勢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

  1. quick 、 brown 和 fox 須要所有出如今域中
  2. brown 的位置應該比 quick 的位置大 1
  3. fox 的位置應該比 quick 的位置大 2
  4. 上面任何一個選項不成立,則該文檔不能認定爲匹配

對 短語查詢進行一些優化
經過加入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 測試

  • 前綴搜索的步驟
    1. 掃描詞列表,並查找第一個關鍵詞
    2. 收集關聯的文檔id
    3. 移動到下一個詞。
    4. 若是這個詞也是以 關鍵字開頭,查詢跳回到第二步再重複執行,直到下一個詞不以關鍵字 爲止。
Elasticsearch - 理解字段分析過程(_analyze與_explain)
  • _explain 用來幫助分析文檔的relevance score是如何計算出來
    1. GET /product/_analyze?text="自由行", 使用默認的額analyze來分析自由行
    2. 指定的analyzer來分析 例如 GET /product/_analyze ?analyzer=pinyin_analyzer&text=" 自由行"
    3. 指定field的analyzer來分析 GET /product/_analyze?field=base.name&text=" 自由行"
  • _analyze用來分析每個field或者某個analyzer/tokenizer是如何分析和索引一段文字
    1. 使用_explain向ElasticSearch詢問慶於該文檔是如何匹配(或者沒有匹配上)的解釋信息
    2. 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

Elasticsearch進行search查詢的過程當中,出現了Result window is too large錯誤
- ES默認窗口10000。能夠用修改index.max_result_window參數來解決問題
- curl -XPUT http://127.0.0.1:9200/product/_settings -d '{ "index" : { "max_result_window" : 100000}}'
相關文章
相關標籤/搜索