如果老板扔一個(gè)需求:做個(gè)搜索的功能。作為一名產(chǎn)品經(jīng)理,千萬(wàn)不要只畫一個(gè)搜索框、一個(gè)“搜索”按鈕行疏,然后交給開發(fā):一周內(nèi)把這個(gè)功能做出來(lái)! 一頭霧水的程序猿問(wèn):搜索的結(jié)果該怎么呈現(xiàn)套像?結(jié)果該怎么排序酿联? 作為功能的設(shè)計(jì)者,如果你沒(méi)深入的思考搜索功能的產(chǎn)品邏輯夺巩,被鄙視贞让、被噴、被嘲諷在所難免柳譬!
那搜索功能的原理是怎樣的呢喳张?
對(duì)用戶來(lái)說(shuō),在什么情況下需要搜索呢美澳?根據(jù)實(shí)際使用場(chǎng)景销部,無(wú)非兩種:1.用戶明確知道自己要什么內(nèi)容,直奔主題快速搜索自己想要的內(nèi)容制跟;2.不清楚或者大致知道自己想要什么內(nèi)容舅桩,通過(guò)搜索篩選出自己目標(biāo)內(nèi)容。不管何種場(chǎng)景雨膨,搜索滿足了用戶快速尋找自己感興趣內(nèi)容的需求江咳。用戶輸入一個(gè)query,一般系統(tǒng)會(huì)做出如下的處理流程:
? ? ? 第一步:系統(tǒng)對(duì)用戶輸入的信息進(jìn)行解讀
? ? ? 第二步:根據(jù)用戶輸入信息對(duì)內(nèi)容進(jìn)行篩選
? ? ? 第三步:對(duì)篩選的結(jié)果進(jìn)行排序
這是三個(gè)步驟是搜索機(jī)制的核心哥放,可以通過(guò)服務(wù)端和系統(tǒng)的角度對(duì)搜索的原理進(jìn)行解讀歼指。我們先看一下數(shù)據(jù)的存儲(chǔ)邏輯:以一個(gè)電商平臺(tái)的搜索功能舉例來(lái)說(shuō),平臺(tái)內(nèi)會(huì)有多種分類或品牌甥雕,如下:
數(shù)據(jù)庫(kù)的存儲(chǔ)結(jié)構(gòu)就是類似于這個(gè)樣子的踩身,左邊就是所謂的“詞庫(kù)”:只要一次搜索的輸入詞能匹配到詞庫(kù),就可以快速的查找詞庫(kù)到對(duì)應(yīng)的內(nèi)容社露;右邊就是具體的內(nèi)容索引庫(kù)挟阻。這種搜索模式就像圖書館的索引結(jié)構(gòu),一步一步的引導(dǎo),找出用戶想要的內(nèi)容附鸽。所以用一句話歸納:一個(gè)系統(tǒng)詞庫(kù)脱拼,一個(gè)內(nèi)容索引庫(kù),而且詞庫(kù)和索引庫(kù)是相互關(guān)聯(lián)的坷备。
?根據(jù)這個(gè)原理熄浓,我們對(duì)上面的搜索核心步驟一步步進(jìn)行解讀。
?第一步:系統(tǒng)對(duì)用戶輸入的信息進(jìn)行解讀
通過(guò)詞庫(kù)找與之對(duì)應(yīng)的內(nèi)容省撑,再把內(nèi)容呈現(xiàn)給用戶赌蔑,這當(dāng)然是一個(gè)比較理想的狀態(tài)。但現(xiàn)實(shí)問(wèn)題來(lái)了竟秫,我們系統(tǒng)不可能限制用戶的輸入行為娃惯,而我們系統(tǒng)的詞庫(kù)是有限的。比如肥败,用戶輸入“我的滑板鞋子”趾浅,系統(tǒng)里不可能有這個(gè)詞,直接的結(jié)果就是搜索結(jié)束馒稍,用戶搜不到自己想要的結(jié)果皿哨。對(duì)于這種特殊情況,怎么才能展現(xiàn)結(jié)果呢筷黔?那就是分詞!? ?何為分詞仗颈,就是把用戶輸入的關(guān)鍵詞(字符串)進(jìn)行拆分佛舱,比如用戶輸入的“我的天啊鞋子”可以進(jìn)行如下拆分:“我的” ?“滑板鞋”,經(jīng)過(guò)這樣的處理挨决,用戶非標(biāo)準(zhǔn)的query就變成了標(biāo)準(zhǔn)的詞庫(kù)请祖,可以進(jìn)行下一步的流程處理了。
?第二步:根據(jù)用戶輸入信息對(duì)內(nèi)容進(jìn)行篩選
對(duì)用戶的query進(jìn)行解讀之后脖祈,會(huì)得到一些標(biāo)準(zhǔn)化的詞肆捕,這些詞會(huì)對(duì)應(yīng)一些內(nèi)容,接下來(lái)就是對(duì)內(nèi)容進(jìn)行篩選了盖高,對(duì)內(nèi)容的篩選會(huì)涉及到兩個(gè)概念:召回率和準(zhǔn)確率慎陵,看如下矩陣:
準(zhǔn)確率指的是搜到內(nèi)容中相關(guān)內(nèi)容的比例;召回率指的是搜索到內(nèi)容中喻奥,真正被搜索出來(lái)的比例席纽。這兩個(gè)指標(biāo)的比例越靠近1,效果越好撞蚕,但是有些情況下润梯,準(zhǔn)確率和召回率是一組相互矛盾的指標(biāo),比如我們只搜索出一個(gè)搜索結(jié)果,且是正確的纺铭,那準(zhǔn)確率就達(dá)到了100%寇钉,但是召回率卻很低。這兩個(gè)概念在搜索優(yōu)化中是關(guān)鍵性指標(biāo)舶赔,涉及到更高級(jí)的搜索機(jī)制扫倡,這里不做深入探討。這里需提醒一點(diǎn)顿痪,不是所有包含用戶query關(guān)鍵詞的結(jié)果都應(yīng)該被召回镊辕。
?第三步:對(duì)搜索的結(jié)果進(jìn)行排序
其實(shí)搜索的邏輯應(yīng)該是通用的:用戶輸入一個(gè)文本(字符串),該文本會(huì)轉(zhuǎn)化為標(biāo)準(zhǔn)詞庫(kù)中的詞蚁袭,搜索系統(tǒng)根據(jù)每個(gè)具體內(nèi)容是否包含這些詞來(lái)決定是否展示這些內(nèi)容征懈,同時(shí)搜索系統(tǒng)根據(jù)文本的相關(guān)性給這些展示的內(nèi)容一個(gè)分?jǐn)?shù),分?jǐn)?shù)的高低決定的排序的先后揩悄。
因此卖哎,對(duì)搜索結(jié)果進(jìn)行排序十分關(guān)鍵,排序位置的高低決定了點(diǎn)擊率删性、轉(zhuǎn)化率等一系列關(guān)鍵性運(yùn)營(yíng)指標(biāo)亏娜,很顯然排序越靠前的結(jié)果更容易獲得用戶的點(diǎn)擊。好的搜索不僅僅是把應(yīng)該搜索的內(nèi)容盡可能的搜索出來(lái)蹬挺,同時(shí)還要考慮應(yīng)該把容易吸引用戶的內(nèi)容展示在前面维贺。但是如何對(duì)篩選出來(lái)的內(nèi)容進(jìn)行排序呢?這里涉及到了較復(fù)雜的算法規(guī)則巴帮。
下面這個(gè)Lucene的核心排序公式的原理溯泣,有專業(yè)文章詳細(xì)介紹:
當(dāng)然還有很多這種公式的變形式,所有的變形式都基于這個(gè)準(zhǔn)則:賦予每個(gè)因子不同的權(quán)重榕茧,所賦予權(quán)重的值直接影響排序的先后垃沦。如搜索出來(lái)的商品,價(jià)格用押、銷量等元素都可作為排序的因子肢簿,如果把“銷量”這個(gè)因子賦予較高的權(quán)重,那么銷量較大的商品搜索出來(lái)會(huì)靠前蜻拨。當(dāng)然池充,對(duì)某個(gè)因子賦權(quán)的大小視業(yè)務(wù)的需求而定。
搜索的原理基本是這樣的缎讼,其中涉及到的一些復(fù)雜算法不在此篇文章的探討范圍之內(nèi)纵菌,也無(wú)法進(jìn)行深度探討。了解了搜索的原理休涤,下次我們?cè)O(shè)計(jì)搜索系統(tǒng)咱圆、碰到搜索相關(guān)的功能時(shí)笛辟,腦子里就會(huì)有一個(gè)清晰的邏輯。原理了解了序苏,那設(shè)計(jì)搜索功能還會(huì)遇到一些搜索的交互以及界面細(xì)節(jié)問(wèn)題手幢,下回找時(shí)間寫一篇文章介紹如何對(duì)搜索功能進(jìn)行界面設(shè)計(jì)以及用戶體驗(yàn)提升的細(xì)節(jié)。