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