日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

es 搜索推荐:Suggest

發布時間:2024/3/26 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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數據是頻繁操作,這樣就簡化了代碼。這段解釋有木有很牛逼,網上搜到的都是官方文檔的翻譯,覺悟雷同。

總結

以上是生活随笔為你收集整理的es 搜索推荐:Suggest的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。