?????? Lucene
是apache軟件基金會(huì)jakarta項(xiàng)目組的一個(gè)子項(xiàng)目,是一個(gè)開放源代碼的全文檢索引擎工具包,即它不是一個(gè)完整的全文檢索引擎,而是一個(gè)全文檢索引擎的架構(gòu),提供了完整的查詢引擎和索引引擎,部分文本分析引擎(英文與德文兩種西方語言)。Lucene的目的是為軟件開發(fā)人員提供一個(gè)簡(jiǎn)單易用的工具包,以方便的在目標(biāo)系統(tǒng)中實(shí)現(xiàn)全文檢索的功能,或者是以此為基礎(chǔ)建立起完整的全文檢索引擎。
作為一個(gè)開放源代碼項(xiàng)目,Lucene從問世之后,引發(fā)了開放源代碼社群的巨大反響,程序員們不僅使用它構(gòu)建具體的全文檢索應(yīng)用,而且將之集成到各種系統(tǒng)軟件中去,以及構(gòu)建Web應(yīng)用,甚至某些商業(yè)軟件也采用了Lucene作為其內(nèi)部全文檢索子系統(tǒng)的核心。apache軟件基金會(huì)的網(wǎng)站使用了Lucene作為全文檢索的引擎,IBM的開源軟件eclipse的2.1版本中也采用了Lucene作為幫助子系統(tǒng)的全文索引引擎,相應(yīng)的IBM的商業(yè)軟件Web Sphere中也采用了Lucene。Lucene以其開放源代碼的特性、優(yōu)異的索引結(jié)構(gòu)、良好的系統(tǒng)架構(gòu)獲得了越來越多的應(yīng)用。
Lucene
作為一個(gè)全文檢索引擎,其具有如下突出的優(yōu)點(diǎn):
(1)索引文件格式獨(dú)立于應(yīng)用平臺(tái)。Lucene定義了一套以8位字節(jié)為基礎(chǔ)的索引文件格式,使得兼容系統(tǒng)或者不同平臺(tái)的應(yīng)用能夠共享建立的索引文件。
(2)在傳統(tǒng)全文檢索引擎的倒排索引的基礎(chǔ)上,實(shí)現(xiàn)了分塊索引,能夠針對(duì)新的文件建立小文件索引,提升索引速度。然后通過與原有索引的合并,達(dá)到優(yōu)化的目的。
(3)優(yōu)秀的面向?qū)ο蟮南到y(tǒng)架構(gòu),使得對(duì)于Lucene擴(kuò)展的學(xué)習(xí)難度降低,方便擴(kuò)充新功能。
(4)設(shè)計(jì)了獨(dú)立于語言和文件格式的文本分析接口,索引器通過接受Token流完成索引文件的創(chuàng)立,用戶擴(kuò)展新的語言和文件格式,只需要實(shí)現(xiàn)文本分析的接口。
(5)已經(jīng)默認(rèn)實(shí)現(xiàn)了一套強(qiáng)大的查詢引擎,用戶無需自己編寫代碼即使系統(tǒng)可獲得強(qiáng)大的查詢能力,Lucene的查詢實(shí)現(xiàn)中默認(rèn)實(shí)現(xiàn)了布爾操作、模糊查詢(Fuzzy Search)、分組查詢等等。
面對(duì)已經(jīng)存在的商業(yè)全文檢索引擎,Lucene也具有相當(dāng)?shù)膬?yōu)勢(shì)。首先,它的開發(fā)源代碼發(fā)行方式(遵守Apache Software License),在此基礎(chǔ)上程序員不僅僅可以充分的利用Lucene所提供的強(qiáng)大功能,而且可以深入細(xì)致的學(xué)習(xí)到全文檢索引擎制作技術(shù)和面相對(duì)象編程的實(shí)踐,進(jìn)而在此基礎(chǔ)上根據(jù)應(yīng)用的實(shí)際情況編寫出更好的更適合當(dāng)前應(yīng)用的全文檢索引擎。在這一點(diǎn)上,商業(yè)軟件的靈活性遠(yuǎn)遠(yuǎn)不及Lucene。其次,Lucene秉承了開放源代碼一貫的架構(gòu)優(yōu)良的優(yōu)勢(shì),設(shè)計(jì)了一個(gè)合理而極具擴(kuò)充能力的面向?qū)ο蠹軜?gòu),程序員可以在Lucene的基礎(chǔ)上擴(kuò)充各種功能,比如擴(kuò)充中文處理能力,從文本擴(kuò)充到HTML、PDF等等文本格式的處理,編寫這些擴(kuò)展的功能不僅僅不復(fù)雜,而且由于Lucene恰當(dāng)合理的對(duì)系統(tǒng)設(shè)備做了程序上的抽象,擴(kuò)展的功能也能輕易的達(dá)到跨平臺(tái)的能力。最后,轉(zhuǎn)移到apache軟件基金會(huì)后,借助于apache軟件基金會(huì)的網(wǎng)絡(luò)平臺(tái),程序員可以方便的和開發(fā)者、其它程序員交流,促成資源的共享,甚至直接獲得已經(jīng)編寫完備的擴(kuò)充功能。最后,雖然Lucene使用Java語言寫成,但是開放源代碼社區(qū)的程序員正在不懈的將之使用各種傳統(tǒng)語言實(shí)現(xiàn)(例如.net framework),在遵守Lucene索引文件格式的基礎(chǔ)上,使得Lucene能夠運(yùn)行在各種各樣的平臺(tái)上,系統(tǒng)管理員可以根據(jù)當(dāng)前的平臺(tái)適合的語言來合理的選擇。
?? Heritrix是IA的開放源代碼,可擴(kuò)展的,基于整個(gè)Web的,歸檔網(wǎng)絡(luò)爬蟲工程
?? Heritrix工程始于2003年初,IA的目的是開發(fā)一個(gè)特殊的爬蟲,對(duì)網(wǎng)上的
?? 資源進(jìn)行歸檔,建立網(wǎng)絡(luò)數(shù)字圖書館,在過去的6年里,IA已經(jīng)建立了400TB的數(shù)據(jù)。
?? IA期望他們的crawler包含以下幾種:
?? 寬帶爬蟲:能夠以更高的帶寬去站點(diǎn)爬。
?? 主題爬蟲:集中于被選擇的問題。
?? 持續(xù)爬蟲:不僅僅爬更當(dāng)前的網(wǎng)頁還負(fù)責(zé)爬日后更新的網(wǎng)頁。
?? 實(shí)驗(yàn)爬蟲:對(duì)爬蟲技術(shù)進(jìn)行實(shí)驗(yàn),以決定該爬什么,以及對(duì)不同協(xié)議的爬蟲爬行結(jié)果進(jìn)行分析的。
Heritrix的主頁是http://crawler.archive.org
?? Heritrix是一個(gè)爬蟲框架,可加如入一些可互換的組件。
?? 它的執(zhí)行是遞歸進(jìn)行的,主要有以下幾步:
?? 1。在預(yù)定的URI中選擇一個(gè)。
?? 2。獲取URI
?? 3。分析,歸檔結(jié)果
?? 4。選擇已經(jīng)發(fā)現(xiàn)的感興趣的URI。加入預(yù)定隊(duì)列。
?? 5。標(biāo)記已經(jīng)處理過的URI
?? Heritrix主要有三大部件:范圍部件,邊界部件,處理器鏈
?? 范圍部件:主要按照規(guī)則決定將哪個(gè)URI入隊(duì)。
?? 邊界部件:跟蹤哪個(gè)預(yù)定的URI將被收集,和已經(jīng)被收集的URI,選擇下一個(gè)URI,剔除已經(jīng)處理過的URI。
?? 處理器鏈:包含若干處理器獲取URI,分析結(jié)果,將它們傳回給邊界部件
?? Heritrix的其余部件有:
?? WEB管理控制臺(tái):大多數(shù)都是單機(jī)的WEB應(yīng)用,內(nèi)嵌JAVA HTTP 服務(wù)器。
?操作者可以通過選擇Crawler命令來操作控制臺(tái)。
?? Crawler命令處理部件:包含足夠的信息創(chuàng)建要爬的URI。
?? Servercache(處理器緩存):存放服務(wù)器的持久信息,能夠被爬行部件隨時(shí)
查到,包括IP地址,歷史記錄,機(jī)器人策略。
?? 處理器鏈:
?????? 預(yù)取鏈:主要是做一些準(zhǔn)備工作,例如,對(duì)處理進(jìn)行延遲和重新處理,否決隨后的操作。
????????提取鏈:主要是獲得資源,進(jìn)行DNS轉(zhuǎn)換,填寫請(qǐng)求和響應(yīng)表單
????????抽取鏈:當(dāng)提取完成時(shí),抽取感興趣的HTML,JavaScript,通常那里有新的也適合的URI,此時(shí)URI僅僅被發(fā)現(xiàn),不會(huì)被評(píng)估
????????寫鏈:存儲(chǔ)爬行結(jié)果,返回內(nèi)容和抽取特性,過濾完存儲(chǔ)。
????????提交鏈:做最后的維護(hù),例如,測(cè)試那些不在范圍內(nèi)的,提交給邊界部件
?? Heritrix 1.0.0包含以下關(guān)鍵特性:
??????????????1.用單個(gè)爬蟲在多個(gè)獨(dú)立的站點(diǎn)一直不斷的進(jìn)行遞歸的爬。
??????????????2。從一個(gè)提供的種子進(jìn)行爬,收集站點(diǎn)內(nèi)的精確URI,和精確主機(jī)。
??????????????3。主要是用廣度優(yōu)先算法進(jìn)行處理。
??????????????4。主要部件都是高效的可擴(kuò)展的
??????????????5。良好的配置,包括:
??????????????????a。可設(shè)置輸出日志,歸檔文件和臨時(shí)文件的位置
??????????????????b。可設(shè)置下載的最大字節(jié),最大數(shù)量的下載文檔,和最大的下載時(shí)間。
??????????????????c。可設(shè)置工作線程數(shù)量。
??????????????????d。可設(shè)置所利用的帶寬的上界。
??????????????????e。可在設(shè)置之后一定時(shí)間重新選擇。
??????????????????f。包含一些可設(shè)置的過濾機(jī)制,表達(dá)方式,URI路徑深度選擇等等。
??Heritrix的局限:
?????????????? 1。單實(shí)例的爬蟲,之間不能進(jìn)行合作。
?????????????? 2。在有限的機(jī)器資源的情況下,卻要復(fù)雜的操作。
?????????????? 3。只有官方支持,僅僅在Linux上進(jìn)行了測(cè)試。
?????????????? 4。每個(gè)爬蟲是單獨(dú)進(jìn)行工作的,沒有對(duì)更新進(jìn)行修訂。??????????????????????
5
。在硬件和系統(tǒng)失敗時(shí),恢復(fù)能力很差。
?6。很少的時(shí)間用來優(yōu)化性能。?
?
??? 根據(jù)搜索引擎工作原理,Heritrix從互聯(lián)網(wǎng)上抓取網(wǎng)頁,Lucene建立索引數(shù)據(jù)庫,在索引數(shù)據(jù)庫中搜索排序.
jwebee
我的個(gè)人網(wǎng)站
posted on 2007-05-24 20:09
周行 閱讀(3666)
評(píng)論(10) 編輯 收藏 所屬分類:
IT技術(shù)