作為
Lucene和
Nutch兩大Apach Open Source Project的始創人(其實還有Lucy, Lucene4C 和Hadoop等相關子項目),Doug Cutting 一直為搜索引擎的開發人員所關注。他終于在為Yahoo以Contractor的身份工作4年后,于今年正式以Employee的身份加入Yahoo
下面是筆者在工作之余,翻譯其一篇2年前的訪談錄,
原文(Doug Cutting Interview)在網上Google一下就容易找到。希望對搜索引擎開發的初學者起到一個拋磚引玉的效果。
(注:翻譯水平有限,不求雅,只求信,達。希望見諒)
1。請問你以何為生?你是如何開始從事搜索引擎開發的?
我主要在家從事兩個與搜索有關的開源項目的開發: Lucene和Nutch.?錢主要來自于一些與這些項目相關的一些合同中。目前Yahoo! Labs?有一部分贊助在Nutch上。這兩個項目還有一些其他的短期合同?。
2。你能大概給我們講解一下Nutch嗎?以及你將在哪方面運用它?我還是先說一下Lucene吧。Lucene其實是一個提供全文文本搜索的函數庫,它不是一個應用軟件。它提供很多API函數讓你可以運用到各種實際應用程序中?,F在,它已經成為Apache的一個項目并被廣泛應用著。這里列出一些
已經使用Lucene的系統。
Nutch是一個建立在Lucene核心之上的Web搜索的實現,它是一個真正的應用程序。也就是說,你可以直接下載下來拿過來用。它在Lucene的基礎上加了網絡爬蟲和一些和Web相關的東東。其目的就是想從一個簡單的站內索引和搜索推廣到全球網絡的搜索上,就像Google和Yahoo一樣。當然,和那些巨人競爭,你得動一些腦筋,想一些辦法。我們已經測試過100M的網頁,并且它的設計用在超過1B的網頁上應該沒有問題。當然,讓它運行在一臺機器上,搜索一些服務器,也運行的很好。
3。在你看來,什么是搜索引擎的核心元素?也就說,一般的搜索引擎軟件可以分成哪幾個主要部分或者模塊?讓我想想,大概是如下幾塊吧:
?-- 攫取(fetching):就是把被指向的網頁下載下來。
?-- 數據庫:保存攫取的網頁信息,比如那些網頁已經被攫取,什么時候被攫取的以及他們又有哪些鏈接的網頁等等。
?-- 鏈接分析:對剛才數據庫的信息進行分析,給每個網頁加上一些權值(比如PageRank,WebRank什么的),以便對每個網頁的重要性有所估計。不過,在我看來,索引那些網頁標記(Anchor)里面的內容更為重要。(這也是為什么諸如Google Bombing如此高效的原因)
?-- 索引(Indexing): 就是對攫取的網頁內容,以及鏈入鏈接,鏈接分析權值等信息進行索引以便迅速查詢。
?-- 搜索(Searching): 就是通過一個索引進行查詢然后按照網頁排名顯示。
當然,為了讓搜索引擎能夠處理數以億計的網頁,以上的模塊都應該是分布式的。也就是說,可以在多臺機器上并行運行。
4。你剛才說大家可以立馬下載Nutch運行在自己的機器上。這是不是說,即便那些對Apache服務器沒有掌控權的網站管理員在短時間內就可以使用Nutch?很不幸,估計他們大都沒戲。因為Nutch還是需要一個Java servlet的容器(筆者注:比如Tomcat)。而這個有些ISP支持,但大都不支持。(筆者注: 只有對Apache服務器有掌控權,你才能在上面安裝一個Tomcat之類的東東)
5。我可以把Lucene和Google Web API結合起來嗎?或者和其他的一些我先前寫過的應用程序結合起來?
有那么一幫人已經為Nutch寫了一些類似Google的API, 但還沒有一個融入現在的系統。估計不久的將來就行了。
6。你認為目前實現一個搜索引擎最大的障礙在哪里?是硬件,存儲障礙還是排名算法?還有,你能不能告訴我大概需要多大的空間搜索引擎才能正常工作,就說我只想寫一個針對搜索成千上百萬的RSS feeds的一個搜索引擎吧。Nutch大概一個網頁總共需要10kb的空間吧。Rss feeds的網頁一般都比較小(筆者注: Rss feeds都是基于xml的文本網頁,所以不會很大),所以應該更好處理吧。當然Nutch目前還沒有針對RSS的支持。(筆者注:實際上,API里面有針對RSS的數據結構和解析)
7。從Yahoo! Labs拿到資金容易嗎?哪些人可以申請?你又要為之做出些什么作為回報?我是被邀請的,我沒有申請。所以我不是很清楚個中的流程。
8。Google有沒有表示對Nutch感興趣?我和那邊的一些家伙談過,包括Larry Page(筆者注: Google兩個創始人之一)。他們都很愿意提供一些幫助,但是他們也無法找到一種不會幫助到他們競爭對手的合適方式。
9。你有實現你自己的PageRank或者WebRank算法系統在你的Nutch里嗎?什么是你做網頁排名(Ranking)的考慮?
是的,Nutch里面有一個鏈接分析模塊。它是可選的,因為對于站內搜索來說,網頁排名是不需要的。
10。我想你以前有聽說過,就是對于一個開源的搜索引擎,是不是意味著同樣會給那些搞搜索引擎優化(SEO)的黑客們有機可趁?恩,有可能。
就說利用反向工程破解的非開源搜索引擎中的最新的反垃圾信息檢測算法需要大概6個月的時間。對于一個開放源碼的搜索引擎來說,破解將會更快。但不管怎么說,那些制造垃圾信息者最終總能找到破解辦法,唯一的區別就是破解速度問題。所以最好的反垃圾信息技術,不管開源也好閉源也好,就是讓別人知道了其中的機制之后也能繼續工作那一種。
還有,如果這六月中你是把檢測出來的垃圾信息從你的索引中移除,他們無計可施,他們只能改變他們的站點。如果你的垃圾信息檢測是基于對一些網站中好的和壞的例子的統計分析,你可以徹夜留意那些新的垃圾信息模式并在他們有機會反應之前將他們移除。
開源會使得禁止垃圾信息的任務稍稍艱巨一點,但不是使之成為不可能。況且,那些閉源的搜索引擎也并沒有秘密地解決這些問題。我想閉源的好處就是不讓我們看到它其實沒有我們想象的那么好。
11。Nutch和分布式的網絡爬蟲Grub相比怎么樣?你是怎么想這個問題的?我能說的就是,Grub是一個能夠讓網民們貢獻一點自己的硬件和帶寬給巨大的LookSmart的爬行任務的一個工程。它只有客戶端是開源,而服務端沒有。所以大家并不能配置自己的Grub服務,也不能訪問到Grub收集的數據。
更一般意義的分布式網絡爬行又如何?當一個搜索引擎變得很大的時候,其爬行上的代價相對搜索上需要付出的代價將是小巫見大巫。所以,一個分布式爬蟲并不能是顯著降低成本,相反它會使得一些已經不是很昂貴的東西變得很復雜(筆者注:指pc和硬盤之類的硬件)。所以這不是一個便宜的買賣。
廣泛的分布式搜索是一件很有趣的事,但我不能肯定它能否實現并保持速度足夠的快。一個更快的搜索引擎就是一個更好的搜索引擎。當大家可以任意快速更改查詢的時候,他們就更能在他們失去耐心之前頻繁找到他們所需的東西。但是,要建立一個不到1秒內就可以搜索數以億計的網頁的廣泛的分布式搜索引擎是很難的一件事,因為其中網絡有很高的延時。大都的半秒時間或者像Google展示它的查詢那樣就是在一個數據中心的網絡延時。如果你讓同樣一個系統運行在千家萬戶的家里的PC上,即便他們用的是DSL和Cable上網,網絡的延時將會更高從而使得一個查詢很可能要花上幾秒鐘甚至更長的時間。從而他也不可能會是一個好的搜索引擎。
12。你反復強調速度對于搜索引擎的重要性,我經常很迷惑Google怎么就能這么快地返回查詢結果。你認為他們是怎么做到的呢?還有你在Nutch上的經驗看法如何?我相信Google的原理和Nutch大抵相同:就是把查詢請求廣播到一些節點上,每個節點返回一些頁面的頂級查詢結果。每個節點上保存著幾百萬的頁面,這樣可以避免大多查詢的磁盤訪問,并且每個節點可以每秒同時處理成十上百的查詢。如果你想獲得數以億計的頁面,你可以把查詢廣播到成千的節點上。當然這里會有不少網絡流量。
具體的在
這篇文章(
www.computer.org/ micro/mi2003/ m2022.pdf)中有所描述。
13。你剛才有提到垃圾信息,在Nutch里面是不是也有類似的算法?怎么區別垃圾信息模式比如鏈接場(Linkfarms)(筆者注:就是一群的網頁彼此互相鏈接,這是當初在1999年被一幫搞SEO弄出來的針對lnktomi搜索引擎的使網頁的排名得到提高的一種Spamdexing方法)和那些正常的受歡迎的站點鏈接。
這個,我們還沒有騰出時間做這塊。不過,很顯然這是一個很重要的領域。在我們進入鏈接場之前,我們需要做一些簡單的事情:察看詞匯填充(Word stuffing)(筆者注:就是在網頁里嵌入一些特殊的詞匯,并且出現很多的次,甚至上百次,有些是人眼看不到的,比如白板寫白字等伎倆,這也是Spamdexing方法的一種),白板寫白字(White-on-white text),等等。
我想在一般意義上來說(垃圾信息檢測是其中的一個子問題),搜索質量的關鍵在于擁有一個對查詢結果手工可靠評估的輔助措施。這樣,我們可以訓練一個排名算法從而產生更好的查詢結果(垃圾信息的查詢結果是一種壞的查詢結果)。商業的搜索引擎往往會雇傭一些人進行可靠評估。Nutch也會這樣做,但很顯然我們不能只接受那些友情贊助的評估,因為那些垃圾信息制造者很容易會防止那些評估。因此我們需要一種手段去建立一套自愿評估者的信任體制。我認為一個平等評論系統(peer-review system),有點像Slashdot的karma系統, 應該在這里很有幫助。
14。你認為搜索引擎在不久的將來路在何方?你認為從一個開發者的角度來看,最大的障礙將在哪里?
很抱歉,我不是一個想象力豐富的人。我的預測就是在未來的十年里web搜索引擎將和現在的搜索引擎相差無幾。現在應該屬于平穩期。在最初的幾年里,網絡搜索引擎確實曾經發展非常迅速。源于1994年的網絡爬蟲使用了標準的信息析取方法。直到1998年Google的出現,其間更多的基于Web的方法得到了發展。從那以后,新方法的引入大大放慢了腳步。那些樹枝低的果實已被收獲。創新只有在剛發展的時候比較容易,越到后來越成熟,越不容易創新。網絡搜索引擎起源于上個世紀90年代,現在儼然已成一顆搖錢樹,將來很快會走進人們的日常生活中。
至于開發上的挑戰,我認為操作上的可靠性將是一個大的挑戰。我們目前正在開發一個類似GFS(Google的文件系統)的東西。它是巨型搜索引擎不可缺少的基石:你不能讓一個小組件的錯誤導致一個大的癱瘓。你應該很容易的讓系統擴展,只需往硬件池里加更多硬件而不需繁縟的重新配置。還有,你不需要一大坨的操作人員完成,所有的一切將大都自己搞定。
----------------完----------------------