es 搜索推荐:Suggest
搜索推薦:Suggest
概述
搜索一般都會要求具有“搜索推薦”或者叫“搜索補全”的功能,即在用戶輸入搜索的過程中,進行自動補全或者糾錯。以此來提高搜索文檔的匹配精準度,進而提升用戶的搜索體驗,這就是Suggest。
四種Suggester
-
term suggester:term suggester正如其名,只基于tokenizer之后的單個term去匹配建議詞,并不會考慮多個term之間的關系
POST <index>/_search { "suggest": {"<suggest_name>": {"text": "<search_content>","term": {"suggest_mode": "<suggest_mode>","field": "<field_name>"}}} }Options:
- text:用戶搜索的文本
- field:要從哪個字段選取推薦數據
- analyzer:使用哪種分詞器
- size:每個建議返回的最大結果數
- sort:如何按照提示詞項排序,參數值只可以是以下兩個枚舉:
- score:分數>詞頻>詞項本身
- frequency:詞頻>分數>詞項本身
- suggest_mode:搜索推薦的推薦模式,參數值亦是枚舉:
- missing:默認值,僅為不在索引中的詞項生成建議詞
- popular:僅返回與搜索詞文檔詞頻或文檔詞頻更高的建議詞
- always:根據 建議文本中的詞項 推薦 任何匹配的建議詞
- max_edits:可以具有最大偏移距離候選建議以便被認為是建議。只能是1到2之間的值。任何其他值都將導致引發錯誤的請求錯誤。默認為2
- prefix_length:前綴匹配的時候,必須滿足的最少字符
- min_word_length:最少包含的單詞數量
- min_doc_freq:最少的文檔頻率
- max_term_freq:最大的詞頻
-
phrase suggester:phrase suggester和term suggester相比,對建議的文本會參考上下文,也就是一個句子的其他token,不只是單純的token距離匹配,它可以基于共生和頻率選出更好的建議。
Options:
- real_word_error_likelihood: 此選項的默認值為 0.95。此選項告訴 Elasticsearch 索引中 5% 的術語拼寫錯誤。這意味著隨著這個參數的值越來越低,Elasticsearch 會將越來越多存在于索引中的術語視為拼寫錯誤,即使它們是正確的
- max_errors:為了形成更正,最多被認為是拼寫錯誤的術語的最大百分比。默認值為 1
- confidence:默認值為 1.0,最大值也是。該值充當與建議分數相關的閾值。只有得分超過此值的建議才會顯示。例如,置信度為 1.0 只會返回得分高于輸入短語的建議
- collate:告訴 Elasticsearch 根據指定的查詢檢查每個建議,以修剪索引中不存在匹配文檔的建議。在這種情況下,它是一個匹配查詢。由于此查詢是模板查詢,因此搜索查詢是當前建議,位于查詢中的參數下。可以在查詢下的“params”對象中添加更多字段。同樣,當參數“prune”設置為true時,我們將在響應中增加一個字段“collate_match”,指示建議結果中是否存在所有更正關鍵字的匹配
- direct_generator:phrase suggester使用候選生成器生成給定文本中每個項可能的項的列表。單個候選生成器類似于為文本中的每個單獨的調用term suggester。生成器的輸出隨后與建議候選項中的候選項結合打分。目前只支持一種候選生成器,即direct_generator。建議API接受密鑰直接生成器下的生成器列表;列表中的每個生成器都按原始文本中的每個項調用。
-
completion suggester:自動補全,自動完成,支持三種查詢【前綴查詢(prefix)模糊查詢(fuzzy)正則表達式查詢(regex)】 ,主要針對的應用場景就是"Auto Completion"。 此場景下用戶每輸入一個字符的時候,就需要即時發送一次查詢請求到后端查找匹配項,在用戶輸入速度較高的情況下對后端響應速度要求比較苛刻。因此實現上它和前面兩個Suggester采用了不同的數據結構,索引并非通過倒排來完成,而是將analyze過的數據編碼成FST和索引一起存放。對于一個open狀態的索引,FST會被ES整個裝載到內存里的,進行前綴查找速度極快。但是FST只能用于前綴查找,這也是Completion Suggester的局限所在。
- completion:es的一種特有類型,專門為suggest提供,基于內存,性能很高。
- prefix query:基于前綴查詢的搜索提示,是最常用的一種搜索推薦查詢。
- prefix:客戶端搜索詞
- field:建議詞字段
- size:需要返回的建議詞數量(默認5)
- skip_duplicates:是否過濾掉重復建議,默認false
- fuzzy query
- fuzziness:允許的偏移量,默認auto
- transpositions:如果設置為true,則換位計為一次更改而不是兩次更改,默認為true。
- min_length:返回模糊建議之前的最小輸入長度,默認 3
- prefix_length:輸入的最小長度(不檢查模糊替代項)默認為 1
- unicode_aware:如果為true,則所有度量(如模糊編輯距離,換位和長度)均以Unicode代碼點而不是以字節為單位。這比原始字節略慢,因此默認情況下將其設置為false。
- regex query:可以用正則表示前綴,不建議使用
-
context suggester:完成建議者會考慮索引中的所有文檔,但是通常來說,我們在進行智能推薦的時候最好通過某些條件過濾,并且有可能會針對某些特性提升權重。
- contexts:上下文對象,可以定義多個
- name:context的名字,用于區分同一個索引中不同的context對象。需要在查詢的時候指定當前name
- type:context對象的類型,目前支持兩種:category和geo,分別用于對suggest item分類和指定地理位置。
- boost:權重值,用于提升排名
- path:如果沒有path,相當于在PUT數據的時候需要指定context.name字段,如果在Mapping中指定了path,在PUT數據的時候就不需要了,因為 Mapping是一次性的,而PUT數據是頻繁操作,這樣就簡化了代碼。這段解釋有木有很牛逼,網上搜到的都是官方文檔的翻譯,覺悟雷同。
- contexts:上下文對象,可以定義多個
總結
以上是生活随笔為你收集整理的es 搜索推荐:Suggest的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 云服务器备案需要网站吗,云服务器需要备案
- 下一篇: 压缩大战真相