基于elasticsearch suggester的中文檢索建議實(shí)現(xiàn)

寫一下個人spark實(shí)現(xiàn)的es completion suggester,目錄如下,

1. Overview
2. 補(bǔ)全功能
    - 整體架構(gòu)
    - 分詞
    - 檢索歷程
3. 糾正功能
    - 待實(shí)現(xiàn)
4. 存在問題
5. Reference

Overview

檢索建議suggestion(補(bǔ)全completion和糾正correction)是提升用戶搜索體驗(yàn)的一個重要功能,通過協(xié)助用戶輸入更精準(zhǔn)的關(guān)鍵詞,提高后續(xù)全文檢索階段文檔匹配度。

檢索關(guān)鍵詞補(bǔ)全
檢索關(guān)鍵詞糾正

補(bǔ)全功能

在電商平臺(淘寶、京東、Amazon等)上,檢索建議補(bǔ)全可以幫助用戶更準(zhǔn)確、更迅速地定位到潛在購買商品。例如,用戶輸入空氣,電商平臺根據(jù)用戶的歷史行為(login user)或者平臺總體推薦結(jié)果(non-login user),給出有關(guān)空氣的一系列檢索關(guān)鍵詞(如空氣質(zhì)量、空氣劉海、空氣清新劑等),該檢索關(guān)鍵詞可以是簡體、繁體、全拼、首字母拼音等形式。下面使用es的Completion Suggester來實(shí)現(xiàn)補(bǔ)全功能。

漢字補(bǔ)全
拼音補(bǔ)全

整體架構(gòu)

架構(gòu)模塊組織如下,

檢索建議補(bǔ)全架構(gòu)

由三個模塊,一個proxy,一條es總線組成。code將suggestion和normal隔離成2個index,不在normal mapping里加入suggestion,方便更好地管理和升級suggestion;也減輕normal es coordinator的壓力。

分詞

suggest分詞

對于每一個需要index的商品名稱,使用ik挖出其簡體token;使用pinyin挖出其ik后的token的全拼連接和首字母連接。然后插入到suggestion index。

  case class SuggestJson(
    item_id: Long,
    item_name_suggester: Seq[String]
  )

//SuggestJson(93,List(han, dou, yi, she, 2017, ban, 女裝, nvzhuang, nz, 夏裝, xiazhuang, xz, 新款, xinkuan, xk, 寬松, kuansong, ks, xian, shou, 短袖, duanxiu, dx, 兩件套, liangjiantao, ljt, 連衣裙, lianyiqun, lyq, oy6198, lu, 淺藍(lán)色, qianlanse, qls)),(這里需要將`韓都衣舍`這個token加入ik詞表,防止被切開)
normal分詞

正常情況下分詞的ik配置與suggestion配置要求一致,然后將其插入到normal index。

  case class NormalJson(
    item_id: Long,
    item_name: String,
    item_price: Double,
    shop_name: String
  )

//NormalJson(93,韓都衣舍2017韓版女裝夏裝新款寬松顯瘦短袖兩件套連衣裙OY6198陸 淺藍(lán)色 M,116.0,韓都衣舍旗艦店)

檢索歷程

下面描述一下用戶檢索歷程,

  1. 用戶在前端輸入一個query
  2. 該query經(jīng)過proxy請求search_suggestion_with_query模塊找到該query所對應(yīng)的建議詞列表(這里建議詞最好是排序的,即返回與query相關(guān)性最高的建議詞),并返回至前端,供用戶選擇
  3. 用戶在sorted suggestion query list里面點(diǎn)選其中一個作為最終檢索關(guān)鍵詞(final query)
  4. final query經(jīng)過proxy請求search_doc_with_suggestion模塊,查詢normal index里面的內(nèi)容

糾正功能

還沒有實(shí)現(xiàn),但是可以使用Phrase SuggesterTerm suggester來實(shí)現(xiàn)。

  • Term Suggester,基于編輯距離,對analyze過的單個term去提供建議,并不會考慮多個term/詞組之間的關(guān)系。quert -> query
  • Phrase Suggester,在Term Suggester的基礎(chǔ)上,通過ngram以詞組為單位返回建議。noble prize -> nobel prize
  • Completion Suggester,FST數(shù)據(jù)結(jié)構(gòu),類似Trie樹,不用打開倒排,快速返回,前綴匹配
  • Context Suggester,在Completion Suggester的基礎(chǔ)上,用于filter和boost
query糾正

存在問題

  1. suggestion和normal的分離,suggested query的排序。如輸入拼音,如果根據(jù)前綴查找規(guī)則,漢字是不會返回的,但是這里需要漢字
  2. 糾正功能的實(shí)現(xiàn),todo code implementation

Reference

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容