天天看點

搜尋引擎ES相關用法調研

SearchRequestBuilder查詢條件選項

1、遊标查詢(快速,批量):

    scroll 查詢可以用來對 Elasticsearch 有效地執行大批量的文檔查詢,而又不用付出深度分頁那種代價

搜尋引擎ES相關用法調研

圖1

2、精确值查找(term查詢)

用于處理數字(numbers)、布爾值(Booleans)、日期(dates)以及文本(text)

關鍵點:term和terms是包含(contains)操作,而非 等值(equals)

注意點:term查詢不會對查詢詞進行分析,下圖說明了情況

搜尋引擎ES相關用法調研

圖2

搜尋引擎ES相關用法調研

圖3 3、範圍查詢(range 查詢):日期範圍、字元串範圍

    字元串範圍可采用 字典順序(lexicographically)或字母順序(alphabetically)

"range": {

    "lowerversion" : {

         "lte": "3.0.1265 "

     }

    "highversion": {

        "gte" : "3.0.1265",

     }

 }

4、match查詢

    指定多字段必須包含的情況(隻想搜尋包含所有詞項的文檔)

關鍵解讀:對搜尋串分析,隻要分析詞有至少一個比對到就召回

搜尋引擎ES相關用法調研

圖4 5 、match 控制查詢精度:

    match  查詢支援 minimum_should_match  最小比對參數, 這讓我們可以指定必須比對的詞項數用來表示一個文檔是否相關。我們可以将其設定為某個具體數字,更常用的做法是将其設定為一個百分數,因為我們無法控制使用者搜尋時輸入的單詞數量:

搜尋引擎ES相關用法調研

圖5

搜尋引擎ES相關用法調研

圖6

搜尋引擎ES相關用法調研

圖7  解決短語比對中比對不到的問題(多級聯合精度控制)

搜尋引擎ES相關用法調研

圖8

6、dis_max查詢(分離最大化查詢)

搜尋引擎ES相關用法調研

圖9     跟bool查詢的優勢對比,bool查詢隻是簡單的bool分項分數相加;dis_max提升了多字段最佳比對的得分,削弱了單一字段特别高對整體得分的影響

7、短語比對(match_phrase 查詢 ):

       短語比對或許是過于嚴格了,我們能夠通過使用slop參數将靈活度引入短語比對中,slop 參數告訴 match_phrase 查詢詞條相隔多遠時仍然能将文檔視為比對。

搜尋引擎ES相關用法調研

圖10      slop短語查詢将查詢詞條的鄰近度考慮到最終相關度 _score中,slop限制詞項間距大小;在限制間距範圍内間距越近,得分越高。(slop隻能用于match_phrase中,minimum_should_match隻能用于match中)

8、prefix 字首查詢(字首查詢存在性能問題,包括wildcard 和 regexp 查詢,存在嚴重的資源消耗問題)

    match_phrase_prefix 查詢,即時搜尋(instant search) 能力:使用者已經漸漸習慣在輸完查詢内容之前,就能為他們展現搜尋結果

搜尋引擎ES相關用法調研

圖11     prefix查詢是一個詞級别的底層的查詢,它不會在搜尋之前分析查詢字元串,它假定傳入字首就正是要查找的字首。是以有下面的結果

搜尋引擎ES相關用法調研

圖12 9、

wildcard

 和 

regexp

 (模糊和正則)比對

    對于standard分詞器,皮膚名稱字段中的英文單詞,比如iphone、iso、tfbodys等不會被分詞,可以考慮使用下面的正則比對對輸入串進行比對

搜尋引擎ES相關用法調研

圖13

搜尋引擎ES相關用法調研

圖14  

10、Ngrams 在部分比對的應用(邊界 n-grams)

    設定ngram=3結果如下(ngram是在建索引mapping時指定)

ngram與prefix差別:

    ngram在索引層面解決問題,建立索引時需指定字段及ngram的範圍,資料需重建索引(reindex);prefix查詢之前不會分析(類似term)

搜尋引擎ES相關用法調研

圖15

搜尋引擎ES相關用法調研

圖16

搜尋引擎ES相關用法調研

圖17

搜尋引擎ES相關用法調研

圖18

11、組合查詢中的權重評分控制

搜尋引擎ES相關用法調研

圖19 綜合使用match和match_phrase:

1、 使用match通過精度控制包含和排除文檔

2、 使用match_phrase增加比對到的文檔的相關度評分

搜尋引擎ES相關用法調研

圖20 針對***搜尋需求

1、 嘗試使用ngram解決字段中包含英文名稱搜尋的問題

2、 使用組合查詢,match召回控制精度(對應輸入法需求,無關項不召回),match_phrase控制相關度的評分

繼續閱讀