搜索引擎學習過程?
01-09
一直對搜索引擎很感興趣,奈何自己研究方向不是這個。自學買了一些關於搜索引擎的書籍例如,這就是搜索引擎。講的還可以,自己想通過寫一個簡單的搜索引擎,可是大部分都是調用工具包的API,沒能理解底層實現演算法,而且感覺搜索引擎包含東西太多,不知從何下手。請高手指點
搜索引擎非常複雜,模塊很多。按最粗的分可以分成三個模塊,離線系統,在線系統,相關性。離線系統從網路上爬數據下來,對每一個網頁的質量進行評估,把質量好的數據推送給在線系統。評估主要包括:計算pangerank,去重,反作弊。
在線系統分3步:
1.拿到數據後,對數據進行建索引,對於每一個網頁分配一個docID,對所有查詢詞建立倒排鏈,倒排鏈由所有包含這個詞的網頁的docID構成。索引一般10來天進行一次全量更新,每天進行小增量更新,做的好的系統還可以進行實時更新,一旦有新數據來立刻進索引,幾分鐘後就能檢索到新數據。2.粗排:按DF和pangeRank等指標從查詢詞相關的幾條倒排鏈中海選出質量比較好的幾萬個doc,供下一輪精排用。3.精排:對粗排選出的doc進行相關性算分,把分數好的前幾百條結果返回給用戶。相關性:yy出各種feature,對這個doc按每個feature進行算分,最後得出一個綜合分。涉及一大堆數據挖掘,機器學習,用戶行為分析等演算法。
學習搜索引擎可以從這三塊入手,對系統感興趣可以研究在線系統,對演算法感興趣可以研究相關性。如果只想搞個玩具搜索引擎玩玩,可以先忽略搜索效果和性能,先搭一個單機框架出來。如果想從事相關職業做出實際可用的產品的話,效果和性能是兩個不能迴避的問題:1.效果的話必然需要學習機器學習,數據挖掘等演算法,這方面我不是很了解,有待專業人士解答。2.性能的話,必然需要學習分散式技術,索引動輒幾十TB,單機必然是存不下的,所以得把索引切成很多片,分別存在不同機器上,然後去每台機器上搜出來把結果merge起來。這樣的話分散式調度系統得有吧,分散式存儲也得有吧,為了加快建索引速度mapReduce也得有吧,多台機器之間得通信RPC也得有吧,機器一多定位問題調試系統的話監控系統也得有吧。分散式,大數據是大勢所趨,搜索引擎便是分散式系統的最典型應用,所以掌握一些分散式技術,了解下hadoop,zookeeper神馬的還是不錯的。
可以直接學習開源的搜索引擎是如何實現的,比如huichen/wukong · GitHub
我畢業之後也是搞搜索引擎的,最近也在初學,整理了一些筆記:高洪濤的成長之路,歡迎交流。
介紹本書《這就是搜索引擎:核心技術詳解》
推薦閱讀:
※年齡大的普通程序員最後的出路是哪裡?
※為什麼很多人都瞧不起微軟卻很崇拜蘋果?
※在搜索引擎上如何用英文搜索?
※為什麼知乎上很多答主都過度關注評論?
※IT行業的HR,如何看待頻繁跳槽的程序員?