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