什么是lucene
Apache Lucene是一個開放源程序的搜尋器引擎,利用它可以輕易地為Java軟件加入全文搜尋功能。Lucene的最主要工作是替文件的每一個字作索引,索引讓搜尋的效率比傳統(tǒng)的逐字比較大大提高,Lucen提供一組解讀,過濾,分析文件,編排和使用索引的API,它的強大之處除了高效和簡單外,是最重要的是使使用者可以隨時應自已需要自訂其功能。 Lucene是apache軟件基金會項目組的一個子項目,是一個開放源代碼的全文檢索引擎工具包,即它不是一個完整的全文檢索引擎,而是一個全文檢索引擎的架構,提供了完整的查詢引擎和索引引擎,部分文本分析引擎。Lucene的目的是為軟件開發(fā)人員提供一個簡單易用的工具包,以方便的在目標系統(tǒng)中實現(xiàn)全文檢索的功能,或者是以此為基礎建立起完整的全文檢索引擎。
Lucene的作者:
Lucene的原作者是Doug Cutting,他是一位資深全文索引/檢索專家,曾經是V-Twin搜索引擎的主要開發(fā)者,后在Excite擔任高級系統(tǒng)架構設計師,目前從事于一些Internet底層架構的研究。
Lucene的歷史:
早先發(fā)布在作者自己的http://www.lucene.com/,后來發(fā)布在SourceForge,2001年年底成為apache軟件基金會jakarta的一個子項目。 現(xiàn)在則是apache的頂級項目http://lucene.apache.org/
Lucene應用:
apache軟件基金會的網站使用了Lucene作為全文檢索的引擎
IBM的開源軟件eclipse也采用了Lucene作為幫助子系統(tǒng)的全文索引引擎,
相應的IBM的商業(yè)軟件Web Sphere中也采用了Lucene。
著名的Jive論壇使用了它
Eyebrows(EyeBrows是目前APACHE項目的主要郵件列表歸檔系統(tǒng))郵件列表HTML歸檔/瀏覽/查詢系統(tǒng)
也使用了它
Lucene以其開放源代碼的特性、優(yōu)異的索引結構、良好的系統(tǒng)架構獲得了越來越多的應用。
Cocoon:基于XML的web發(fā)布框架,全文檢索部分使用了Lucene
到現(xiàn)在lucene已經有C++、C#、Python和Perl的版本
更多關于lucene的應用見這里:http://wiki.apache.org/lucene-java/PoweredBy
Lucene能做什么
Lucene使你可以為你的應用程序添加索引和搜索能力(這些功能將在1.3節(jié)中描述)。Lucene可以索引并能使得可以轉換成文本格式的任何數(shù)據(jù)能夠被搜索。在圖1.5可以看出,Lucene并不關心數(shù)據(jù)的來源、格式甚至它的語言,只要你能將它轉換為文本。這就意味著你可經索引并搜索存放于文件中的數(shù)據(jù):在遠程服務器上的web頁面,存于本地文件系統(tǒng)的文檔,簡單的文本文件,微軟Word文檔,HTML或PDF文件或任何其它能夠提取出文本信息的格式。
同樣,利用Lucene你可以索引存放于數(shù)據(jù)庫中的數(shù)據(jù),提供給用戶很多數(shù)據(jù)庫沒有提供的
全文搜索的能力。一旦你集成了Lucene,你的應用程序的用戶就能夠像這樣來搜索:+George +Rice –eat –pudding, Apple –pie +Tiger, animal:monkey AND food:banana等等。利用Lucene,你可以索引和搜索email郵件,郵件列表檔案,即時聊天記錄,你的Wiki頁面……等等更多。
Lucene資料:
Lucene主頁:http://lucene.apache.org/
中文的lucene教程: http://www.chedong.com/tech/lucene.html#intro
寫的很好的lucene書:lucene in action
luceneAPI:http://lucene.zones.apache.org:8080/hudson/job/Lucene-Nightly/javadoc/
lucene in action 示例代碼:http://www.manning.com/hatcher2
lucene 的wiki:http://wiki.apache.org/lucene-java/FrontPage?action=show&redirect=FrontPageEN
Lucene的優(yōu)點:
(1)索引文件格式獨立于應用平臺。Lucene定義了一套以8位字節(jié)為基礎的索引文件格式,使得兼容系統(tǒng)或者不同平臺的應用能夠共享建立的索引文件。
(2)在傳統(tǒng)全文檢索引擎的倒排索引的基礎上,實現(xiàn)了分塊索引,能夠針對新的文件建立小文件索引,提升索引速度。然后通過與原有索引的合并,達到優(yōu)化的目的。
(3)優(yōu)秀的面向對象的系統(tǒng)架構,使得對于Lucene擴展的學習難度降低,方便擴充新功能。
(4)設計了獨立于語言和文件格式的文本分析接口,索引器通過接受Token流完成索引文件的創(chuàng)立,用戶擴展新的語言和文件格式,只需要實現(xiàn)文本分析的接口。
(5)已經默認實現(xiàn)了一套強大的查詢引擎,用戶無需自己編寫代碼即使系統(tǒng)可獲得強大的查詢能力,Lucene的查詢實現(xiàn)中默認實現(xiàn)了布爾操作、模糊查詢、分組查詢等等。
Lucene的周邊
Nutch vs Lucene
Lucene 不是完整的應用程序,而是一個用于實現(xiàn)全文檢索的軟件庫。
Nutch 是一個應用程序,可以以 Lucene 為基礎實現(xiàn)搜索引擎應用。
Nutch vs Larbin
"Larbin只是一個爬蟲,也就是說larbin只抓取網頁,至于如何parse的事情則由用戶自己完成。另外,如何存儲到數(shù)據(jù)庫以及建立索引的事情 larbin也不提供Nutch vs Larbin
"Larbin只是一個爬蟲,也就是說larbin只抓取網頁,至于如何parse的事情則由用戶自己完成。另外,如何存儲到數(shù)據(jù)庫以及建立索引的事情 larbin也不提供
Nutch 則還可以存儲到數(shù)據(jù)庫并建立索引。
搜索的概念(本段來自lucene in action原文):
索引和搜索
所有搜索引擎的核心就是索引的概念:將原始數(shù)據(jù)處理成一個高效的交差引用的查找結構以便于快速的搜索。讓我們對索引和搜索過程做一次快速的高層次的瀏覽。
什么是索引,為什么它很重要?
想像一下,你需要搜索大量的文件,并且你想找出包含一個指定的詞或短語的文件。你如何編寫一個程序來做到這個?一個幼稚的方法是針對給定的詞或短語順序掃描每個文件。這個方法有很多缺點,最明顯的就是它不適合于大量的文件或者文件非常巨大的情況。這時就出現(xiàn)了索引:為了快速搜索大量的文本,你必須首先索引那個文本然后把它轉化為一個可以讓你快速搜索的格式,除去緩慢的順序地掃描過程。這個轉化過程稱為索引,它的輸出稱為一條索引。你可以把索引理解為一個可以讓你快速隨機訪問存于其內部的詞的數(shù)據(jù)結構。它隱含的概念類似于一本書最后的索引,可以讓你快速找到討論指定主題的頁面。在Lucene中,一個索引是一個精心設計的數(shù)據(jù)結構,在文件系統(tǒng)中存儲為一組索引文件。我們在附錄B中詳細地說明了索引文件的結構,但是目前你只須認為Lucene的索引是一個能快速的詞匯查找的工具。
什么是搜索?
搜索是在一個索引中查找單詞來找出它們所出現(xiàn)的文檔的過程。一個搜索的質量用精確度和召回率來描述。召回率衡量搜索系統(tǒng)搜索到相關文檔的能力,精確度衡量系統(tǒng)過濾不相關文檔的能力。然而,在考慮搜索時你必須考慮其它一些因素。我們已經提到速度和快速搜索大量文本的能力。支持單個和多個詞匯的查詢,短語查詢,通配符,結果分級和排序也是很重要的,在輸入這些查詢的時候也是友好的語法。Lucene強大的軟件庫提供了大量的搜索特征、bells和whistles,