目標(biāo)
目前搜索業(yè)務(wù)除了搜商品之外,我總結(jié)為都是輸入為query,輸出為根據(jù)query推薦的信息灸芳。比如"搜索導(dǎo)航"輸出的是一堆類目id和屬性id, "搜索提示"輸出的是query相關(guān)根據(jù)算法提供的score排序, "熱搜詞"輸出的是與query相關(guān)的熱門搜索, "你可能會(huì)搜產(chǎn)品"輸出的是對(duì)應(yīng)中心詞怀骤。這些產(chǎn)品可以統(tǒng)一成一張以query詞key,collum為算法輸出的query特征Hbase表虚循。在這張表中,除了存儲(chǔ)一些算法數(shù)據(jù),還可以插入query維度的相關(guān)特征信息比如pv;uv;gmv等。 根據(jù)這張表, 我能很方便的管理算法的abtest功能,搜索詞的數(shù)據(jù)統(tǒng)計(jì)功能,所有搜索詞相關(guān)產(chǎn)品工程實(shí)現(xiàn)可以對(duì)接這張表,算法開發(fā)的搜索詞的基礎(chǔ)數(shù)據(jù)也可以接入這張表碳想。
Hbase表設(shè)計(jì)如下
query ? 導(dǎo)航類目id ? 導(dǎo)航屬性id ?搜索提示算法score1 ? 搜索提示算法score2 ?相關(guān)搜索詞.......
衣服 ? ?10001 ? ? ? ? ? 10048 ? ? ? ? ? ? ?1.6 ? ? ? ? ? ? ? ? ? ? ? ?1.7 ? ? ? ? ? ? ? ? ? 冬季衣服 ,冬季女裝
褲子 ? ?10003 ? ? ? ? ? 10048 ? ? ? ? ? ? ?1.5 ? ? ? ? ? ? ? ? ? ? ? ?2.0 ? ? ? ? ? ? ? ? ? ? ? ....
包包 ? ?10006 ? ? ? ? ? ?10048 ? ? ? ? ? ? ?1.4 ? ? ? ? ? ? ? ? ? ? ? 2.1 ? ? ? ? ? ? ? ? ? ? ? ....
搜索相關(guān)算法產(chǎn)品的query為網(wǎng)站的歷史搜索詞, 可以通過(guò)添加列添加對(duì)應(yīng)的內(nèi)容摩幔。由于Hbase 面向列存儲(chǔ)的,可以橫向擴(kuò)展,只要有query維度的算法產(chǎn)品需求凸郑,我們可以添加一列,算法工程師可以把query對(duì)應(yīng)的值存在這個(gè)列中。這樣對(duì)于搜索業(yè)務(wù)開發(fā)取對(duì)應(yīng)的算法數(shù)據(jù)非常方便玫恳。在這個(gè)搜索詞特征表的基礎(chǔ)下辨赐,設(shè)想的算法出數(shù)據(jù),工程組裝數(shù)據(jù)并展示給用戶的流程如下:
為什么需要搜索詞特征表
以前接到搜索詞維度的需求是,都是算法產(chǎn)出的數(shù)據(jù)通過(guò)人肉的方法(熱搜詞推薦,xxx告訴我redis地址或者接口)給工程人員纽窟,獲取干脆工程人員自己維護(hù)一份算法數(shù)據(jù)(導(dǎo)航和搜索提示)肖油。這樣的結(jié)果是,開發(fā)過(guò)程是非常高效的單兵作戰(zhàn), 但是后期有算法人員需要優(yōu)化的時(shí)候,就會(huì)研究整個(gè)具體的工程(比如svn up一個(gè)搜索提示的工程,然后開始debug),這樣并不適合快速算法更新迭代。假如采用上述的方式,算法開發(fā)只需要對(duì)接Hbase表, 根據(jù)對(duì)算法工程師的調(diào)研,他們產(chǎn)生最終算法數(shù)據(jù)生成一個(gè)文件給我,和把這些數(shù)據(jù)插入到Hbase的成本是一樣的臂港。那么從搜索業(yè)務(wù)工程師的角度而言,只要了解算法產(chǎn)品對(duì)應(yīng)的Hbase列,那么導(dǎo)航森枪、搜索提示等搜索詞維度工程的初始化操作也都是統(tǒng)一的,那就是從表中select某個(gè)列,然后開始處理。
搜索詞特征表其他功能
既然這張搜索詞特征表可以存儲(chǔ)算法數(shù)據(jù)审孽, 那也可以把計(jì)算搜索詞pv,uv,gmv看做一個(gè)“算法”县袱,存儲(chǔ)搜索詞對(duì)應(yīng)的pv,uv,gmv等數(shù)據(jù), 接下來(lái)這張表的結(jié)構(gòu)可以演變成如下:
query 導(dǎo)類目id 導(dǎo)航屬性id 提示算法score1 提示算法score2 相關(guān)搜索詞 ? ?pv ? ?uv ? ? ?gmv
衣服 ? ?10001 ? ?10048 ? ? ? ?1.5 ? ? ? ? ? ? ? ? ? 1.6 ? ? ? ? ? ? ? ? 冬季衣服 ? ? ?112 ? 12 ? ? ?32
褲子? ? 10002 ? ?10001 ? ? ? ?1.7 ? ? ? ? ? ? ? ? ? 1.9 ? ? ? ? ? ? ? ? ....
包包? ? 10004? ? 10003 ? ? ? ?1.8 ? ? ? ? ? ? ? ? ? 2.1 ? ? ? ? ? ? ? ? ....
對(duì)于搜索詞的算法產(chǎn)品, 幾乎都需要搜索詞的pv,uv,gmv數(shù)據(jù)。 上一節(jié)提到算法開發(fā)可以很方便的輸出到搜索詞特征表, 那么我們把這些數(shù)據(jù)存在這張表, 算法工程師的輸入也可以來(lái)自這張表, 這對(duì)算法開發(fā)的工作也很有幫助佑力。我了解到算法團(tuán)隊(duì)一般用spark跑算法數(shù)據(jù),這樣做的結(jié)果是spark工程中的輸入和輸出都是同一個(gè)地方,可以簡(jiǎn)少代碼維護(hù)工作式散。這樣做的結(jié)果如下:
其他衍生功能
如果算法開發(fā)有abtest需求, 搜索詞工程(搜索提示,導(dǎo)航)處理之前可以獲取abtest配置信息,這個(gè)配置信息包括走哪個(gè)算法(對(duì)應(yīng)Hbase列),還包括打點(diǎn)信息(自定義參數(shù))打颤。從kafka日志系統(tǒng)獲取這些打點(diǎn)數(shù)據(jù)分析后,可以計(jì)算出該搜索詞在該算法下的表現(xiàn)如何暴拄。這個(gè)表現(xiàn)結(jié)果還是插入到搜索詞特征表,那么算法的總體表現(xiàn)可以通過(guò)特征表畫出曲線圖看到算法結(jié)果编饺。最終的搜索詞query產(chǎn)品的規(guī)劃如下:
希望有搜索業(yè)務(wù)的相關(guān)開發(fā)或者產(chǎn)品提出意見(jiàn),針對(duì)query分析的相關(guān)業(yè)務(wù),如何有一個(gè)更好的方式統(tǒng)一起來(lái)乖篷。