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