Suggestion(搜索建議)產品和技術

今天來簡單聊聊Suggestion產品前端

什麼是Suggestion服務? 一圖勝千言:mysql

當你想要搜索某個長詞語或者一句話輸入部分時,Suggestion服務預測你極大可能的候選項,並羅列出來,供你選擇。sql

產品的意義:緩存

1. 下降用戶搜索的輸入成本,用戶老是懶惰的,誰能讓用戶最懶惰還能幫他把事辦好,這就是好的產品。固然若是真有一天能用腦電波搜索了,這個產品功能就沒意義了.spa

2. 爲用戶提供提示,由於有部分用戶多一個長詞組頗有可能只能記住部分。若有部電影叫"心急吃不了熱豆腐",朋友A推薦給朋友B,只記得"心急吃不了啥"了日誌

3. 提升搜索轉化率,用戶在任何過程當中都有可能流失,打字打完"心急吃不了",一個朋友說別看這個了,看<冰與火之歌>吧,可能還差那最後3個字就能轉戰別的電影了blog

 

什麼樣的詞應該歸入到Suggestion裏面去呢?排序

若是把所用全部的搜索記錄都做爲suggestion服務,那用戶輸入完一個前綴後,就會出現滿屏的詞語;在這種場景下,儘可能提供好用的suggestion而保持簡潔的結果的祕訣在於把控數量並提升轉化率,因此通常能夠用雙重法則字符串

1. 若是這個前綴的全部搜索詞不超過N個,按轉化機率從大到小排序產品

2. 若是超過N個, 放棄掉用戶轉化率小於a的搜索詞,按轉化機率從大到小排序

 

總體技術上怎麼實現呢?

若是你在作一個Suggestion總詞語量較小的產品. (<千萬級)

短平快,直接用小腳本掃天天的用戶搜索日誌,而後根據策略得出整個搜索詞表,放到Mysql中;

查詢直接用  select XXX from TABLE_XXX where SuggestionWords like {QUERY}% 進行查詢

訪問量大怎麼辦?

mysql 的查詢成爲瓶頸,在前面加一層緩存,來存儲結果List便可.

訪問量極大怎麼辦?

這裏極大的意思時,一瞬間的某個詞語的緩存未命中(失效或者DB更新後delete)查詢會拖死Mysql

兩個思路

1. mysql加從庫 Master-Slave集羣

2. 更新時主動生成緩存,讓前端查詢任什麼時候刻都看不到緩存未命中

 

若是你在作一個Suggestion總詞語量較大的產品. (>千萬級)

相似的場景我以前遇到的是百度的賬號註冊時的Suggestion, N億的註冊用戶,新用戶上來了想註冊abcd這個賬號,已經被佔用了,因此通常推薦abcd做爲前綴能用的賬號如abcd1,abcd11等,相似的場景如域名註冊服務商的推薦。

技術實現上能夠用Tire樹,Tire樹的每一個條邊就是每一個詞,從非根節點到根節點通過的全部的邊組成了一個詞,以下圖的最長詞dcba

經過這種方式就能對海量基數詞進行Suggestion服務了。

另外tire樹的插入、查找、刪除的時間複雜度都是o(N),N爲待插入、查找、刪除字符串的長度。

相關文章
相關標籤/搜索