




已閱讀5頁,還剩42頁未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
Chapter2 lucene框架基礎(chǔ),陳珂銳 計(jì)算機(jī)與信息工程學(xué)院,目錄,1.Lucene簡介 2.預(yù)備知識(shí)-類圖 3.Lucene類圖 4.入門實(shí)例,1. Lucene簡介,1.1 什么是Lucene 1.2 全文檢索系統(tǒng)的結(jié)構(gòu) 1.3 為什么使用Lucene 1.4 Lucene版本號(hào) 1.5 Lucene移植版本 1.6 Lucene倒排索引原理 1.7 基于Lucene的搜索程序 1.8 Nutch,1.1 什么是Lucene,Lucene是非常優(yōu)秀的成熟的開源的免費(fèi)的純java語言的全文索引檢索工具包。 全文檢索是指計(jì)算機(jī)索引程序通過掃描文章中的每一個(gè)詞,對每一個(gè)詞建立一個(gè)索引,指明該詞在文章中出現(xiàn)的次數(shù)和位置,當(dāng)用戶查詢時(shí),檢索程序就根據(jù)事先建立的索引進(jìn)行查找,并將查找的結(jié)果反饋給用戶的檢索方式。 Lucene是一個(gè)高性能、可伸縮的信息搜索(IR)庫。 Information Retrieval (IR) library.它使你可以為你的應(yīng)用程序添加索引和搜索能力。 Lucene的作者Doug Cutting是資深的全文索引/檢索專家,最開始發(fā)布在他本人的主頁上,2001年10月貢獻(xiàn)給APACHE,成為APACHE基金的一個(gè)子項(xiàng)目。 /lucene/ Lucene是一個(gè)IR庫而不是現(xiàn)成的產(chǎn)品, 當(dāng)然也不是Lucene的初識(shí)者常常認(rèn)為的web爬行器,1.2 全文檢索系統(tǒng)的結(jié)構(gòu),1.3 為什么使用Lucene,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)了分塊索引,能夠針對新的文件建立小文件索引,提升索引速度。然后通過與原有索引的合并,達(dá)到優(yōu)化的目的。 (3)優(yōu)秀的面向?qū)ο蟮南到y(tǒng)架構(gòu),使得對于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的查詢中默認(rèn)實(shí)現(xiàn)了布爾操作、模糊查詢(Fuzzy Search)、分組查詢等等。 開源,可擴(kuò)展能力強(qiáng),有各種語言版本,適合各種平臺(tái),1.4 Lucene版本號(hào)(1),1.4 Lucene版本號(hào)(2),1.5 Lucene 移植版本,Lucene implementations in languages other than Java: CLucene - Lucene implementation in C+ dotLucene - Lucene implementation in .NET Lucene4c - Lucene implementation in C LuceneKit - Lucene implementation in Objective-C (Cocoa/GNUstep support) Lupy - Lucene implementation in Python (RETIRED) NLucene - another Lucene implementation in .NET (out of date) Zend Search - Lucene implementation in the Zend Framework for PHP 5 Plucene - Lucene implementation in Perl KinoSearch - a new Lucene implementation in Perl PyLucene - GCJ-compiled version of Java Lucene integrated with Python MUTIS - Lucene implementation in Delphi Ferret - Lucene implementation in Ruby,1.6 Lucene倒排索引原理,假設(shè)有兩篇文章1和2 文章1: Tom lives in Guangzhou,I live in Guangzhou too. 文章2: He once lived in Shanghai. 經(jīng)過分詞處理后 文章1的所有關(guān)鍵詞為:tom live guangzhou i live guangzhou 文章2的所有關(guān)鍵詞為:he live shanghai 加上“出現(xiàn)頻率”和“出現(xiàn)位置”信息后,我們的索引結(jié)構(gòu)為:,Lucene只關(guān)注文本的索引和搜索!,1.7 基于Lucene的搜索程序,ActiveMath - a user adaptive, interactive and web-based learning environment for mathematics Aduna AutoFocus - a visual desktop search tool Aduna Metadata Server - RDF-based indexing server for metadata and full text Ahahi - a search engine (web,news,image,forum,crawler) Affiliate Ranker - an affiliate program search engine Bigsearch.ca - uses nutch, based on lucene open source software to deliver its search results. BibleDesktop - A Bible study program using lucene to search Bibles,/jakarta-lucene/PoweredBy,1.7 基于Lucene的搜索程序,Bixee - Search Engine for Jobs in India. BNCF Opac - Online Public Access Catalog, indexing data in unimarcslim format Australia Unclassified - Australias 100% FREE online classifieds service Celoxis - web based project management tool CodeCrawler - is a smart, web-based search engine specifically built for use by developers for searching source code. Coolposting - a search engine for discussion forums. Coolposting helps you find the real solutions, experiences and opinions people have posted in different discussion forums. Corinis CCM - a web content management and community system CvMail - web based tool for recruiters (to manage job-applications by mail) ,1.8 Nutch,Nutch 是一個(gè)剛剛誕生開放源代碼(open-source)的web搜索引擎。 Nutch是采用Lucene核心的一個(gè)web搜索引擎的實(shí)現(xiàn) Nutch使用Lucene進(jìn)行索引,所以所有的Lucene工具和API都可以在Nutch生成的索引上工作。 它是一個(gè)真正的應(yīng)用程序。也就是說,你可以直接下載下來拿過來用。它在Lucene的基礎(chǔ)上加了網(wǎng)絡(luò)爬蟲和一些和Web相關(guān)的東東。其目的就是想從一個(gè)簡單的站內(nèi)索引和搜索推廣到全球網(wǎng)絡(luò)的搜索上,像Google和Yahoo一樣。當(dāng)然,和那些巨人競爭,你得動(dòng)一些腦筋,想一些辦法。,2. 預(yù)備知識(shí)類圖,3. Lucene類圖,3. Lucene類圖,3.1 基礎(chǔ)封裝類 3.2 索引核心類 3.3 term 3.4 field 3.5 document 3.6 段(segment),3.1 基礎(chǔ)封裝類,1.org.apache.lucene.util定義了一些常量和優(yōu)化過的常用的數(shù)據(jù)結(jié)構(gòu)和算法。 Arrays:數(shù)組的排序方法的靜態(tài)類,提供了優(yōu)化的基于快排序的排序方法sort BitVectorC/C+語言中位域的java實(shí)現(xiàn)品,但是加入了序列化能力 Constants常量靜態(tài)類,定義了一些常量 PriorityQueue一個(gè)優(yōu)先隊(duì)列的抽象類,用于后面實(shí)現(xiàn)各種具體的優(yōu)先隊(duì)列,提供常數(shù)時(shí)間內(nèi)的最小元素訪問能力,內(nèi)部實(shí)現(xiàn)機(jī)制是哈析表和堆排序算法 2. org.apache.lucene.document文檔(document)和域(field)概念的一個(gè)類定義,3.2 索引核心類,1. org.apache.lucene.store包 。存儲(chǔ)抽象是唯一能夠直接對索引文件存取的包,因此其主要目的是抽象出和平臺(tái)文件系統(tǒng)無關(guān)的存儲(chǔ)抽象,提供諸如目錄服務(wù)(增、刪文件)、輸入流和輸出流 2. org.apache.lucene.index包,3.2 索引核心類-store,整個(gè)org.apache.lucene.store中主要的繼承體系共有三個(gè)抽象類定義: Directory InputStream OutputStrem,3.2 索引核心類-store,構(gòu)成了一個(gè)完整的基于抽象文件系統(tǒng)的存取體系結(jié)構(gòu),在此基礎(chǔ)上,實(shí)作出了兩個(gè)實(shí)現(xiàn)品:(FSDirectory,F(xiàn)SInputStream,F(xiàn)SOutputStream)和(RAMDirectory,RAMInputStream和RAMOutputStream)。 前者是以實(shí)際的文件系統(tǒng)做為基礎(chǔ)實(shí)現(xiàn)的,后者則是建立在內(nèi)存中的虛擬文件系統(tǒng)。前者主要用來永久的保存索引文件,后者的作用則在于索引操作時(shí)是在內(nèi)存中建立小的索引,然后一次性的輸出合并到文件中去,這一點(diǎn)我們在后面的索引邏輯部分能夠看到。,3.2 索引核心類-store,此外,還定以了org.apache.lucene.store.lock和org.apache.lucene.store.with兩個(gè)輔助內(nèi)部實(shí)現(xiàn)的類用在實(shí)現(xiàn)Directory方法的makeLock的時(shí)候,以在鎖定索引讀寫之前來讓客戶程序做一些準(zhǔn)備工作 。 (FSDirectory,F(xiàn)SInputStream,F(xiàn)SOutputStream)的內(nèi)部實(shí)現(xiàn)依托于java語言中的io類庫,只是簡單的做了一個(gè)外部邏輯的包裝,3.2 索引核心類-store,(RAMDirectory,RAMInputStream和RAMOutputStream)的內(nèi)部實(shí)現(xiàn)就比較直接了,直接采用了虛擬的文件RAMFile類 。RAMFile中采用數(shù)組來表示文件的存儲(chǔ)空間 Lucene中存儲(chǔ)抽象這部分設(shè)計(jì)時(shí)采用了工廠模式(Factory parttern),3.2 索引核心類-store,3.2 索引核心類-store,3.2 索引核心類-store,3.2 索引核心類-index,是一個(gè)承上啟下的索引核心部分。無論是對外接口中的查詢,還是分析各種文本以進(jìn)一步生成索引,都需要直接調(diào)用這部分來獲得對索引文件的訪問能力 。 上邊的基礎(chǔ)類已經(jīng)設(shè)計(jì)了DOCUMENT,FIELD,因此實(shí)際上Lucene在這部分需要完善的概念結(jié)構(gòu)還有segment和term。,3.3 term,項(xiàng)(Term)所表示的是一個(gè)字符串,它擁有域、頻數(shù)和位置信息等等屬性。因此,Lucene中設(shè)計(jì)了兩個(gè)類來表示這個(gè)概念: Term TermInfo,3.3 term,上圖中,有意的突出了類Term和TermInfo中的數(shù)據(jù)成員,因?yàn)樗从沉藢τ陧?xiàng)(Term)這個(gè)概念的具體表示。同時(shí)上圖中也同時(shí)列出了用于永久化項(xiàng)(Term)的代理類TermInfosWriter和TermInfosReader,它們完成永久化的功能,需要注意的是,TermInfosReader內(nèi)部使用了數(shù)組indexTerms和indexInfos來存儲(chǔ)一系列項(xiàng);而TermInfosWriter則是一個(gè)類似于鏈表的結(jié)構(gòu),通過一個(gè)other指向下一個(gè)TermInfosWriter,每一個(gè)TermInfosWriter只負(fù)責(zé)本身那個(gè)lastTerm和lastTi的永久化工作。這是一個(gè)設(shè)計(jì)上的技巧,通過批量讀?。ɑ蛘叻Q為緩沖的方式)來獲得讀入時(shí)候的效率優(yōu)化;而通過一個(gè)鏈表式的、各負(fù)其責(zé)的方式,來獲得寫出時(shí)候的設(shè)計(jì)簡化。,3.3 term,項(xiàng)(term)這部分的設(shè)計(jì)中,還有一些重要的接口和類,我們先介紹如下,同樣我們也先展示UML圖,3.3 term,TermEnum、TermDocs與TermPositions,第一個(gè)是抽象類,后兩個(gè)都是接口。TermEnum的設(shè)計(jì)主要用在后面Segment和Document等等的實(shí)現(xiàn)中,以提供枚舉其中每一個(gè)項(xiàng)(Term)的能力。TermDocs是一個(gè)接口,用來繼承以提供返回值對的能力,通過這個(gè)接口就可以獲得某個(gè)項(xiàng)(Term)在某個(gè)文檔中出現(xiàn)的頻數(shù)。TermPositions則是在TermDocs上的擴(kuò)展,將項(xiàng)(Term)在文檔中的位置信息也表示出來。TermDocs(TermPositions)接口的使用方式類似于java中的Enumration接口,即通過next方法跳轉(zhuǎn),通過doc,freq等方法獲得當(dāng)前的屬性值。,3.4 field,由于Field的基本概念在org.apache.lucene.document中已經(jīng)做了定義,因此在這部分主要是針對項(xiàng)文件(.fnm文件、.fdx文件、.fdt文件)所需要的信息再來設(shè)計(jì)一些類。,域表和存取邏輯的UML圖:,3.4 field,FieldInfos即為域表的概念表示,內(nèi)部采用了冗余的方式以獲取在通過域的編號(hào)訪問或者通過域的名字來訪問時(shí)候的高效率。FieldsReader與FieldsWriter則分別是寫出和讀入的代理類,3.5 document,Document的設(shè)計(jì)基本上沿用了鏈表的處理方法。左邊的Document類作為一個(gè)數(shù)據(jù)外包類,用來提供對于內(nèi)部結(jié)構(gòu)DocumentFieldList的增加刪除訪問操作等等。DocumentFieldList才是實(shí)際上的數(shù)據(jù)存儲(chǔ)單位,它用了鏈表的處理方法,直接指向一個(gè)當(dāng)前的Field對象和下一個(gè)DocumentFieldList對象,這個(gè)與前面的類似。為了能夠逐個(gè)訪問鏈表中的節(jié)點(diǎn),還設(shè)計(jì)了DocumentFieldEnumeration枚舉類。,3.5 document,3.5 document,3.6 段(segment),段(Segment)這一部分設(shè)計(jì)的比較特殊,在實(shí)現(xiàn)簡單的對象結(jié)構(gòu)之上,還特意的設(shè)計(jì)了用于段之間合并的類,3.6 段(segment),Lucene定義了一個(gè)類SegmentInfo用來表示每一個(gè)段(Segment)的信息,包括名字(name)、含有的文檔的數(shù)目(docCount)和段所位于的目錄的位置(dir)。根據(jù)索引文件中的段的意義,有了這三點(diǎn),就能唯一確定一個(gè)段了。SegmentInfos這個(gè)類則是用來表示一個(gè)段的鏈表(從標(biāo)準(zhǔn)的java.util.Vector繼承而來),實(shí)際上,也就是索引(index)的意思了。需要注意的是,這里并沒有在SegmentInfo中安插一個(gè)文檔(documen
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 廢玻璃混凝土火后殘余性能及TRC加固機(jī)理研究
- 基于深度學(xué)習(xí)的橋梁故障預(yù)測診斷研究
- 健康教案:變色龍主題教學(xué)設(shè)計(jì)
- 金融系統(tǒng)核心業(yè)務(wù)流程架構(gòu)
- 痔瘡的護(hù)理查房
- 腦出血康復(fù)健康指導(dǎo)
- 頸腰椎病健康講座課件
- 婦科護(hù)理知識(shí)年度總結(jié)
- 幼兒園家長工作案例培訓(xùn)
- 《網(wǎng)頁設(shè)計(jì)與制作》課件-第4Fireworks綜合應(yīng)用
- 2025年廣東高考政治試卷真題答案詳解講評(課件)
- 卡口及道路交通智能監(jiān)控系統(tǒng)方案設(shè)計(jì)
- 2025年家庭照護(hù)師職業(yè)資格考試試題及答案
- 呼吸機(jī)相關(guān)性肺炎的預(yù)防和護(hù)理
- 2025年綏化市中考化學(xué)試題卷(含答案解析)
- 門診口腔院感基礎(chǔ)知識(shí)培訓(xùn)
- 論詠嘆調(diào)《媽媽不在》的形象刻畫與唱段處理
- 危重病人觀察和護(hù)理要點(diǎn)
- 砌體工程培訓(xùn)課件
- GB/T 45719-2025半導(dǎo)體器件金屬氧化物半導(dǎo)體(MOS)晶體管的熱載流子試驗(yàn)
- 2025-2030中國醫(yī)藥商業(yè)行業(yè)盈利態(tài)勢與投資潛力分析報(bào)告
評論
0/150
提交評論