基於Nutch和Hadoop的簡易搜尋引擎

2021-07-01 23:47:56 字數 1156 閱讀 1379

最近和寢室的同學一起搭建了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 的更新策略是直接替換原來的舊網頁...