天天看點

專家訪談:搜尋開源力量:Lucene技術前景

rel="File-List" href="file:///C:%5CDOCUME%7E1%5Cjsj%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C12%5Cclip_filelist.xml" target="_blank" rel="external nofollow" >

專家訪談:搜尋開源力量:Lucene技術前景

記者:搜尋引擎在當今Web技術中為何獨占鳌頭?

吳衆欣:Web中什麼資訊最多?Web的非結構化的資訊最多。這些資訊需要整合,而search engine(SE)正是應運而生。Web新興的事物:結構化Blog,FeedMesh,XMTP(eXtensible Markup Transport Protocol),XML序列化/反序列化,浏覽器應用範圍擴大,massive data。不用多談,如果沒有SE的出現,大家還不知道如何找這些資訊源,SE現在是Web的基礎設施,但請注意,它不是那種根本型的改變。浏覽器與标記語言出現才是根本型的改變。SE是促進型的技術,它對新興的事務很敏感,是以它必須獨占鳌頭,如果把網絡存儲的資訊比做圖書館,管理者的角色很重要,我在交大找不到書,就得找管理者,這裡得感謝他們一下。

記者:我們應該怎樣看待開源的搜尋引擎項目?

吳衆欣:開源的項目就像是百寶箱,可以用,可以學,用來開發就不提了,能學什麼?架構,程式設計技巧,算法。對于開源的搜尋引擎項目,我要着重說一說“算法”。《代碼之美》的序言中提到:算法+資料結構=程式,概念雖然有些老,但是年年企業招聘還是願意考一些算法,《計算機程式設計藝術》的 高德納 先生可以說用畢生的精力來導引大家,讓大家覺得耍小聰明的人(自認為算法,臨時拍拍腦袋想想就得), 支援侯 先生的人(不懂算法,也能程式設計),總是達不到程式設計的标準,這讓人想想都要暗笑,“玄之又玄,衆妙之門”。事物展示到我們的面前分為物情與實體,物情通過使用即可了解,想要由表及裡,實體則需要挖掘“内幕”,“深入淺出”,達到“自己編寫”的目的。這方面對于開源搜尋引擎項目而言,更為突出。

記者:現在有哪些網站使用Lucene技術?

吳衆欣:在Lucene網站的PoweredBy連結中給出了使用Lucene的站點,按照字母排序,其中Eclipse用它來做文檔的檢索,PSNC用它來做數字圖書館的架構,USAjobs Inc. Job Search是找工作的搜尋引擎,其他的桌面搜尋開發站點,琳琳總總不下幾十個。如果我們再擴大一下,從使用Lucene的Nutch演化出的Hadoop項目,使用這個類GFS架構的還有巨人型站點Yahoo!等。是以我推薦大家也看看Lucene的衍生物,挺有意思,基本最近時髦的技術,比如MapReduce,BigTable等,都能在那裡找到。

記者:能否介紹一下Lucene的技術特點?

吳衆欣:Lucene的技術特點這裡不多談,隻談其中一點,就是Lucene的查詢過程。在Lucene網站上的Benchmark大多談的是标引過程,索引結構各個書籍也都有談到,雖然,标引與查詢是逆過程,但是查詢也有自己的特色。最明顯的就是在硬碟,記憶體,CPU三者均衡(balancing)的考慮。我們都知道壓縮體在解壓時耗費的是CPU,但是壓縮可以節省硬碟的存儲空間,I/O通路的時間減少了,這是均衡CPU處理與硬碟通路的時間。Lucene因為支援範圍查詢就為字典程式作了快表,沒有用Hash,快表在查詢時需要提前加載到記憶體中,就好象是汽車的引擎,冬天要預熱一樣。加入到記憶體中的快表與你字典檔案的大小有關,與産生快表的單詞跨度也有關,Lucene在字典檔案中每隔一個跨度就在快表裡記錄一個單詞。跨度太小,記憶體占用太多,跨度太大,周遊硬碟上跨度内的單詞也需要花費時間,這就是硬碟通路與記憶體通路的均衡。當遇到多個查詢詞的情況時,還要考慮每個單詞的部分評分保留在記憶體的情況,不到最後一個查詢詞出現,就得不到最後評分,要是能限定一下記憶體,先在記憶體中儲存前1024個文檔的部分評分,CPU先計算1-1024文檔的總分,然後再計算N/1024次,其中N是文集中文檔的個數,這樣遇到前面的查詢詞是高頻詞,也不會因為儲存其部分評分而使記憶體耗費過大,這就是CPU與記憶體的均衡。硬碟,記憶體,CPU,這三者C3取2,呵呵,我都介紹了。

Lucene使用了多種現代搜尋領域的算法,稍微深入探讨現代的搜尋領域即可發現它不是突出大家對語言的熟悉程度,而是大家解決問題的方法即算法。以前有多人想對Lucene進行語言層面的改造,改造為C plus plus,我想性能雖小有差異,但無此必要。

記者:常常有一些讀者提出這樣的問題:我想做一個搜尋引擎,應該怎麼做?

吳衆欣:這個問題,我在百度“知道”上回答過,這種問題提出的人不少,可見大家都想很快上手。這裡套用一下我百度的回答吧:

http://www.ir.iit.edu/~dagr/cs529/files/ir_book/CHAP%204%20Inverted%20Index.PDF,

給出了基于反向索引的檢索原型實作的簡單代碼,你可以了解一下。入手不難。如果想了解開源的搜尋引擎實作,有Lucene與MG4J,斯芬克斯等等,關于lucene你可以看《lucene分析與應用》,這是我和家立寫的,底層你就差不多了。但請注意,這不是一個完整的搜尋引擎,你還需要看Nutch的網頁抓取過程,建議看《Java機器人程式設計》這本書,再回頭看Nutch,就會很快的入門了。

記者:目前您主要是從事什麼工作,研究的領域?(如有相關的開發的經驗就更好了)

吳衆欣:目前的研究領域是服務組合,這是一個更加有意思的問題,舉個例子,就像是工廠的流水線,将各種部件內建起來,形成一個完整的産品,中間有更多的變數發生。但不屬于這次訪談的内容,我們就不多談了。

與SE的相關開發經驗,有一點。比如自己寫過了一個中文分詞解析器,用C#寫的,算法基于Dijkstra,但是這個是一種經驗型的解析器,不太完善。還有就是從反向索引,恢複出被索引的文檔,這需要對索引的過程,結構比較了解。還有就是用國圖的都柏林core文檔,做了多于 100M

條記錄的索引,其中分詞器有CJK分析器,标準分詞器,自然語言分詞器,産生了3個類别的索引,對Lucene的中文查詢性能好好的測試了一遍,呵呵,誰給我一個大衆普适的中文查詢詞分布,就能告訴大家那種分詞效果好了,Zipf定律也不一定對!

記者:您最近出了一本關于Lucene技術的書,這是怎樣的一本書?請談一談,《Lucene分析與應用》包括哪些内容?

吳衆欣:《Lucene分析與應用》是對Lucene源代碼進行深入分析的書籍,迄今為止,它是分析最透徹的一本。從标引到查詢,主要的過程,算法,都講到了。前面提到的Lucene特點,在這本書中講的很細緻。勘誤内容也發在china-pub上,是想給大家提供一本有品質保證的書,同時也希望大家不要隻想着去用,想想怎麼掌握根本的東西,我們自己是否也能創新?趙炯那本《linux源碼分析》早寫出來了,作業系統方面中國怎麼一直就沒突破?好像是一個國際作業系統牛會,中國15年都沒發文了,大家灌水的功夫都不夠了?

記者:對未來搜尋技術的演化,衍生,變革有哪些預見?

吳衆欣:談不上預見,搜尋技術帶來了大家對資訊的關聯關系認識從關系代數的強關聯,到松關聯的關系上來,恨不得都是key與value對,大而簡單的表。彈性的架構是大家近期追求的,雲計算也是網格的社會主義初級階段的典範,針對的問題都是有一定規模的資料量,效能越來越被重視,解決方案也越來越實際,想清楚的了解發展趨勢,就得深入的探源這些技術背後的本質,從細微處着手,大處着眼,看技術雲升雲湧,潮起潮落!這套用了程式員的一句話了!

《科學的曆程》,《相對論》,《建築模式語言》,《李約瑟看中國古代科技史》,《明式家具研究》,《鑒餘雜稿》大家也都看看,不但打破我們東方思維模式,被西方文化沖擊時,還能保留我們自己一些有益的文化内涵!

專家訪談:搜尋開源力量:Lucene技術前景

繼續閱讀