這個(gè)題目來(lái)自知乎上的一個(gè)問(wèn)題,我今年初開(kāi)始做搜索相關(guān)的工作,到今天已經(jīng)整整7個(gè)月,于是想借這個(gè)題目將自己所理解的搜索引擎原理寫(xiě)下來(lái)。
我不是專業(yè)的搜索工程師,日常工作主要是做搜索產(chǎn)品評(píng)測(cè),這個(gè)身份的缺點(diǎn)是自己的理解會(huì)有一些局限性,優(yōu)點(diǎn)是寫(xiě)出來(lái)的內(nèi)容比較通俗易懂。
希望通過(guò)這些內(nèi)容能幫助大家更好的理解搜索產(chǎn)品。
搜索引擎的第1步:抓取內(nèi)容。
百度、360以及搜狗等通用搜索引擎的處理對(duì)象是整個(gè)互聯(lián)網(wǎng)中上千億的網(wǎng)頁(yè),所以搜索引擎需要面對(duì)的首要問(wèn)題是如何將這些網(wǎng)頁(yè)下載到自己的服務(wù)器上。
進(jìn)行這一任務(wù)的是一種被稱為“網(wǎng)絡(luò)爬蟲(chóng)”的程序,搜索引擎會(huì)派出無(wú)數(shù)的“網(wǎng)絡(luò)爬蟲(chóng)”按照一定的策略(如廣度優(yōu)先或者深度優(yōu)先)完成網(wǎng)頁(yè)抓取任務(wù)。
知乎的搜索是站內(nèi)搜索,處理對(duì)象是自己網(wǎng)站的內(nèi)容,在用戶完成內(nèi)容生產(chǎn)的同時(shí),這些內(nèi)容就存儲(chǔ)到了知乎的服務(wù)器上。所以這一步對(duì)知乎來(lái)說(shuō)是沒(méi)有問(wèn)題的。
搜索引擎的第2步:建立索引。
索引過(guò)程中一個(gè)很重要的步驟是分詞,如這句話“化妝品和服裝”,正確的分詞方法應(yīng)該是[化妝品][和][服裝],如果將“和”、“服”兩個(gè)字結(jié)合分成“和服”的話那么結(jié)果自然就不會(huì)相關(guān)。分詞背后需要有強(qiáng)大的詞庫(kù)儲(chǔ)備(并且需要時(shí)時(shí)更新),以及強(qiáng)大的語(yǔ)義理解系統(tǒng)(比如上面的例子中,“和服”是一個(gè)有意義的詞,但在這個(gè)場(chǎng)景下這樣分詞是有問(wèn)題的)。
搜索引擎會(huì)為每個(gè)網(wǎng)頁(yè)(文檔)建立索引,其中可能包括網(wǎng)頁(yè)包含的詞組、詞組出現(xiàn)的位置(比如“北京大學(xué)”這個(gè)詞,如果拆分成“北京”和“大學(xué)”兩個(gè)term,那么這兩個(gè)term的位置一定要緊挨著,并且北京在前,否則語(yǔ)義會(huì)發(fā)生極大的變化)和頻率、網(wǎng)頁(yè)的內(nèi)外鏈、甚至qanchor數(shù)據(jù)(如果用戶搜索“A"這個(gè)關(guān)鍵詞,點(diǎn)擊了網(wǎng)頁(yè)“B",那么 B就是A的qancher)等。這些因子在決定搜索結(jié)果排序中都有很大的影響。
因?yàn)橹醯莫?dú)特性,每個(gè)回答對(duì)應(yīng)的索引除了上面提到的部分因素外,還可能會(huì)包括贊同數(shù)、反對(duì)數(shù)、感謝數(shù)、所屬的話題、回答者(以及擅長(zhǎng)的話題)等等。當(dāng)然包含的因子越多,對(duì)搜索引擎的存儲(chǔ)和計(jì)算性能等都是巨大的挑戰(zhàn)。
建立索引這個(gè)步驟難度較大,即便是通用搜索引擎也在不停的優(yōu)化。
搜索引擎的第3步:確定排序。
當(dāng)用戶輸入一個(gè)query后,備選結(jié)果集合中的每一條結(jié)果最終會(huì)通過(guò)一系列計(jì)算過(guò)程最終得到一個(gè)分?jǐn)?shù),然后按照分?jǐn)?shù)從高到低排序。一條結(jié)果的得分高低主要跟下面幾個(gè)因素有關(guān),當(dāng)然每個(gè)因素的權(quán)重因子也需要不斷的調(diào)整來(lái)提升準(zhǔn)確性。
1、文本相關(guān)
這個(gè)很好理解,網(wǎng)頁(yè)(問(wèn)答)中包含的詞組需要和搜索詞一致。
2、用戶行為模型
對(duì)知乎中的回答來(lái)說(shuō),有以下幾個(gè)真理:
/點(diǎn)贊多的結(jié)果要好于點(diǎn)贊少的結(jié)果;
/反對(duì)少的結(jié)果要好于反對(duì)多的結(jié)果;
/自己點(diǎn)過(guò)贊的結(jié)果要好于普通的結(jié)果;
/擅長(zhǎng)問(wèn)題所屬領(lǐng)域的回答者的答案要好于普通的回答者;如張三很擅長(zhǎng)回答搜索領(lǐng)域相關(guān)的問(wèn)題,李四擅長(zhǎng)回答金融領(lǐng)域相關(guān)的問(wèn)題,那么對(duì)于一個(gè)搜索領(lǐng)域的問(wèn)題,張三的回答要好于李四的回答。這其中用戶擅長(zhǎng)的話題可以采用用戶自己標(biāo)注或者官方標(biāo)注的方式,也可以根據(jù)用戶的回答記錄智能標(biāo)注,比如現(xiàn)在很多領(lǐng)域中都會(huì)推薦最佳回答者。
/用戶最終有效點(diǎn)擊了的結(jié)果要好于用戶沒(méi)有點(diǎn)擊或者是無(wú)效點(diǎn)擊的結(jié)果。所謂有效點(diǎn)擊指的是用戶點(diǎn)擊并且有合理的停留時(shí)間,而不是點(diǎn)擊之后很快就走了。
3、網(wǎng)頁(yè)質(zhì)量
在搜索引擎中如果某個(gè)網(wǎng)頁(yè)被識(shí)別為網(wǎng)頁(yè)質(zhì)量差(作弊,廣告多,頁(yè)面空短),那么會(huì)被嚴(yán)重降權(quán)甚至屏蔽。
知乎上最近有人涉嫌借助知乎做問(wèn)答營(yíng)銷,如這篇文章提到的,這類結(jié)果除了依靠用戶舉報(bào)外也需要用戶算法來(lái)識(shí)別。此外抖機(jī)靈的回答某種程度上也需要進(jìn)行打壓。
搜索是個(gè)很復(fù)雜的產(chǎn)品,技術(shù)門(mén)檻比較高,其中包含非常多的策略。即便是通用搜索引擎目前也在不斷優(yōu)化當(dāng)前的策略,同時(shí)也在添加新的策略。比如時(shí)效性策略,同義詞策略,網(wǎng)頁(yè)質(zhì)量策略,網(wǎng)站權(quán)重策略等等。