老板要求在一個月內搭建出一個搜索引擎出來,先期要求做一個站內搜索就可以了。于是我只有苦笑了,搜索引擎談何容易,而之前沒有這方面的經(jīng)驗,如何是好呢?這時我腦袋里閃過的,就是需要求助開源社區(qū)了。
我是做Java程序員出身,很快找到了大名鼎鼎的lucene,到ibm的devleopworks上泡了幾天,基本上把lucene的原理搞明白了。當?shù)谝粋€例子跑起來的時候,還是有一些興奮的,因為以前都不敢觸及的技術領域,終于邁出了第一步。
相信大部分中國技術人員在對待國外的開源軟件做的第二件事情就漢化,對于搜索引擎來說就是中文分詞。第二輪的google查詢,挑選了paoding分詞,中國牛人實現(xiàn)的分詞算法,在paoding的發(fā)布文檔中有明確的集成方法,很容易就實現(xiàn)了。當?shù)谝粋€中文搜索結果呈現(xiàn)出來的時候,著實又興奮了一下,因為可以在自己的站點上baidu了,信心有點膨脹,不要見怪啊。
于是為了能出一個最初級的demo,我將lucene的demo改造了一下,將里面的JSP全部加上了公司的LOGO,并且仿造著baidu的風格,做出了索引頁和查詢結果頁。并將分頁、頁面顯示、查詢結果,甚至copyright都實現(xiàn)了一遍。做完這些的時候,我想可以給老板看一下了。這時離老板給我下達組建搜索引擎命令時只有5天,不得不感謝開源啊。
第一個目標達到后,我開始關注一切搜索引擎技術,下載了很多資料,有用的沒用的都看一遍。這時我又心虛了,要實現(xiàn)的技術實在太多了。抓取、壓縮、存儲、分詞、分類、整理、索引、合并、搜索、語義理解、緩存、加速、展示。我覺得每一樣都是一個學科,額的神啦!
看了幾天文章后,我覺得總要做點什么。于是找到lucene的一些相關項目玩了玩,包括solr、compass、luke,heritrix,GlusterFS等。heritrix是一個強大的網(wǎng)絡爬蟲,我用這東東花了兩天時間,把公司的新聞頻道都給抓下來了,比較橫。GlusterFS是一個分布式文件系統(tǒng),但經(jīng)過一番研究后,發(fā)現(xiàn)它用來做文件鏡像備份比較好,適合網(wǎng)站應用。
其中關于solr,研究了兩天把demo搭起來,寫了幾個PHP程序調用,總體感覺這東東做展示、分詞與索引管理方面比較強,但要搭建一個大型搜索引擎,solr明顯不能勝任,與是就此打住了,沒有繼續(xù)研究。
所幸的是lucene的發(fā)明者Doug Cutting發(fā)起了另一個開源項目nutch,它是一個完全的搜索引擎應用程序,包括crawl,distributed computing,search三個部分,這個項目基本上滿足我當時對于搜索引擎架構的需求。一個可以用無限擴展的PC Server集群構建軟件,又興奮了。
但我沒有急于搭建nutch的應用環(huán)境,因為實在不清楚在nutch項目中哪是hadoop文件,哪些是nutch本身的文件。我從hadoop官方站點上下載了hadoop源程序,現(xiàn)在最新的是0.19-dev。用了三臺linux服務器做測試,配置花了我整整兩天,基本上把能做的demo和配置環(huán)境都試了一遍,收獲不小,不得不感嘆開源項目有如此功力。把google的mapreduce和dfs都用java實現(xiàn)了一遍,不敢說可以商業(yè)運營,但至少給類似我這些的技術人員可以迅速進入這個技術領域提供了超乎想像的便利。hadoop除了實現(xiàn)了google提出的mapreduce計算模型外,還實現(xiàn)了類似于GFS(google file system)的分布式文件系統(tǒng)HDFS(Hadoop distributed file system)。很好,很強大!在做hadoop時要感謝一下公司的運維工程師波波,這一塊需要一些linux配置經(jīng)驗。
時機成熟了,我回過頭來開始搭建nutch項目,將項目編譯了一個新版本,簡單的ant package就搞定了,將nutch的編譯版本發(fā)布到之前搭好的hadoop的環(huán)境中去,運行一下,居然一次成功了,測試命令都能通過。開始crawl,看到mapreduce的執(zhí)行過程,心里別提多興奮了。接下來把之前研究好的paoding將到了nutch項目中,是用nutch的插件體系實現(xiàn),沒有改nutch的一句代碼,關于這個的文章不多,完全是靠對ant的理解自行搞定的,呵呵。
為了盡快出效果,將crawl的結果從hdfs中拉到了local,配置一下nutch.war中的nutch-site.xml,迫不及待的啟動tomcat。敲入鏈接,OK。一切都是那么美妙。nutch的logo也比較可愛,兩個小人。接下來,我又拿出來模仿神功,將nutch的所有JSP修改成自己的搜索引擎字樣。nutch里面實現(xiàn)了標題顯示,高亮顯示,網(wǎng)頁鏈接顯示,網(wǎng)頁快照,頁面評分,錨鏈接,以及RSS搜索等等。
到這里,我的第二個目的也達到了,就是利用分布式計算平臺來搭建搜索引擎。
記錄下我到現(xiàn)在對搜索引擎研究的路程,是為了給想進入搜索領域的技術人員一個參照。另外,在今后的文章中,我會陸續(xù)將我每一步研究的心得也blog出來。