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