最近和寢室的同學一起搭建了hadoop的集群,實現了乙個簡易的本地搜尋引擎,並且將其開源到了github上:接下來的幾篇博文將對這個專案及其**作一些詳細的描述。
「搜尋」,簡而言之就是要分析使用者輸入然後輸出給使用者已經排好序的url集合。乙個簡單的實現所需要的排序依據主要就是文字檢索以及url的pagerank值。
pagerank
pagerank演算法有很多文章對其進行講解,其模型類似乙個馬爾科夫鏈。如果乙個高pagerank值的網頁1指向了另乙個網頁2,則可以認為網頁2的pagerank值也會相應的變高。
假設有n個src網頁指向乙個target網頁,則我們認為:
pr[target]=1-dampfac+dampfac*sum
其中,dampfac是為了防止死鏈和陷阱的。
所謂死鏈就是所有的url指向了乙個url,但是此url沒有出鏈,則最後所有網頁的pr會收斂到0。如果此url有指向自己的迴圈,則最後除了此url其它url的pr的值都會收斂到0。
所以在公式裡面加入了阻尼因子dampfac(取為0.85),模擬上網者的真實行為,即你一開始可以以1-dampfac的概率隨機進入此網頁,或者以dampfac的概率從其它網頁進入這個網頁,加入這個因子也可以防止使用者無限制地瀏覽(小於1的數的n次方趨近於0)。藉此避免以上兩種錯誤的收斂情況。
文字檢索
文字檢索有專門的nlp分析方法,在本專案中暫時採用簡單的文字匹配和計數技術。
hadoop實現了分布式檔案系統hdfs以及基於mapreduce的分布式計算。
當你在linux下安裝好hadoop,以偽分布式開啟hadoop後,利用jps檢視可以看到如下6個程序,除了jps其它5個就是hadoop守護程序:
14779 datanode
15322 nodemanager
14657 namenode
15194 resourcemanager
17656 jps
14979 secondarynamenode
有了以上基礎知識,可按照以下步驟具體實現:
安裝好nuch和hadoop(沒有linux基礎的同學,說起來都是淚)
利用hadoop執行樣例程式,可參考:
利用nutch爬取網頁,生成需要的linkdb和parse_text。
看nutch學習hadoop的程式設計
剛下了最新版本的nutch1.0.發現nutch的搜尋已經轉由solr來實現了。nutch上有很多hadoop的應用,可以作為案例學習,看人家如何使用hadoop來實現,這對於剛接觸hadoop程式設計的人來說,這是乙個比較好的選擇,怎麼說nutch也算是hadoop的起源地。新版本的nutch使用...
nutch和lucene的區別
想做乙個搜尋引擎,最近瀏覽了許多社群,發現lucene和nutch用的很多,而這兩個我總感覺難以區分概念,於是在查了些資料。下面是lucene和nutch創始人doug cutting 的訪談摘錄 lucene其實是乙個提供全文文字搜尋的函式庫,它不是乙個應用軟體。它提供很多api函式讓你可以運用到...
Heritrix 和 Nutch的區別
總體來說 heritrix 網路蜘蛛的功能更為強大,nutch 更好地支援搜尋引擎 與 lucene 緊密結合 兩者特點對比如下 nutch 是乙個搜尋引擎框架,而 heritrix nutch heritrix 則可以適用各種型別資訊,嚴格保持網頁原貌。nutch 的更新策略是直接替換原來的舊網頁...