




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、 畢業(yè)論文 題目: 基于Lucene的桌面搜索引擎 學(xué)院: 管理科學(xué)與工程學(xué)院 專業(yè): 信息管理與信息系統(tǒng) 摘 要隨著信息資源的高速膨脹和計(jì)算機(jī)硬件的高速發(fā)展,個(gè)人PC存儲(chǔ)容量變的越來越大。要想在越來越大硬盤里,從海量的資料中查找自己感興趣的文檔信息也隨之變得越來越困難。而往往操作系統(tǒng)中自帶的搜索器又不能完全滿足我們的需求,因此我們迫切需要一款全新的桌面搜索引擎來幫助我們。本文首先簡(jiǎn)單介紹了基于因特網(wǎng)的搜索引擎的系統(tǒng)結(jié)構(gòu)和原理,然后著重介紹了桌面搜索引擎和全文檢索的相關(guān)知識(shí),對(duì)基于Lucene的全文檢索引擎的架構(gòu)原理方面進(jìn)行詳細(xì)的說明,同時(shí)對(duì)Lucene的索引機(jī)制、系統(tǒng)結(jié)構(gòu),以及中文分詞都進(jìn)行
2、了仔細(xì)分析。然后介紹了本文實(shí)現(xiàn)的一個(gè)基于Lucene的桌面搜索引擎。本桌面搜索引擎一個(gè)輕量級(jí)的全文檢索軟件,能夠幫助用戶方便地在越來越大硬盤里,從海量的資料中查找自己感興趣的文檔。從指定的文件路徑中按照目錄層次進(jìn)行解析、搜索,并把搜索到的每條信息進(jìn)行索引后加入索引文件,然后通過Web服務(wù)器接受客戶端請(qǐng)求后從索引文件中搜索出所匹配的信息。關(guān)鍵詞:桌面搜索引擎、倒排索引、lucene、B/S、文本文件AbstractThis article fist introduces the system structure and principle of search engine based on th
3、e internet in detail, then gives a minute explanation form Based on the full-text search engine Lucene framework and principle. In order to understand the technology more deeply, I have programmed a news search engine by myself.The news search engine is explained and searched according to document-l
4、evel directory, then indexs every searched information and adds it to the index file. Then after receiving the customers' requests from the web server, it soon searchs the right information form the index engine.In the chapter of introducing search engine, it is not only elaborate the core techn
5、ology, but also combine with the modern code,pictures included, easy to understand.Key Words:search engine、lucene、B/S、file目錄緒論31. 桌面搜索引擎與全文檢索51.1 搜索引擎的概念及發(fā)展51.2 桌面搜索引擎簡(jiǎn)介61.2.1 Windows自帶搜索功能的不足61.2.2 我們需要一款桌面搜索引擎71.2.3 桌面搜索引擎現(xiàn)狀71.3 全文檢索81.3.1 什么是全文檢索與全文檢索系統(tǒng)81.3.2 全文檢索原理91.3.3 全文檢索的倒排索引原理122. 開放源代碼的全文
6、檢索引擎架構(gòu)Lucene132.1 Lucene簡(jiǎn)介132.1.1 什么是Lucene132.1.2 Lucene的應(yīng)用、特點(diǎn)及優(yōu)勢(shì)142.2 Lucene系統(tǒng)結(jié)構(gòu)分析152.3 深入Lucene 索引機(jī)制172.4 Lucene文檔分析與中文分詞192.4.1 Lucene分析器原理192.4.2 中文分詞212.5 Lucene的索引效率252.6 從Lucene學(xué)到更多263. 基于Lucene的桌面搜索引擎273.1 功能簡(jiǎn)介273.2 桌面搜索引擎索引器設(shè)計(jì)283.2.1 索引器簡(jiǎn)介283.2.2 界面設(shè)計(jì)293.2.2 功能設(shè)計(jì)303.3 桌面搜索引擎索引器實(shí)現(xiàn)313.3.1 解析
7、器實(shí)現(xiàn)313.3.2 中文分詞考慮343.3.3 索引器實(shí)現(xiàn)353.4 搜索器實(shí)現(xiàn)383.4.1 搜索器簡(jiǎn)介383.4.2 搜索器界面383.4.3 搜索器實(shí)現(xiàn)383.4.4 實(shí)例演示393.5 數(shù)據(jù)持久化403.5.1 持久化簡(jiǎn)介403.5.2 具體實(shí)現(xiàn)406. 參考資料41緒 論我們處在一個(gè)信息資源高速膨脹的時(shí)代,信息爆炸已成為一個(gè)全球性的現(xiàn)象。然而,面對(duì)極度膨脹的信息量,面對(duì)“混沌信息空間”和“數(shù)據(jù)過?!钡木薮髩毫Γ藗儗?duì)于信息的苦苦追求和期待忽然間變得踟躕了。每天在我們所生活在的這個(gè)世界都會(huì)出現(xiàn)大量的信息,如果能夠?qū)@些信息做出一些篩選,既可以為我們的廣大用戶提供一些好的知識(shí)與信息,也
8、為他們?yōu)榱藢ふ疫@些知識(shí)與信息節(jié)省時(shí)間與成本.據(jù)統(tǒng)計(jì),新產(chǎn)生的信息中有記錄在硬盤等磁存儲(chǔ)介質(zhì)上,其次分別是膠片、紙張和光存儲(chǔ)介質(zhì)。也正因?yàn)槿绱烁鞣N搜索引擎也應(yīng)運(yùn)而生。搜索引擎的意義網(wǎng)絡(luò)的出現(xiàn)把世界連接成了一個(gè)地球村,信息的傳輸再也不受到時(shí)間和空間的限制,但是處在這樣一個(gè)信息爆炸的網(wǎng)絡(luò)時(shí)代,僅僅是每天誕生的新知識(shí),就可能讓一個(gè)人一生也學(xué)不完。那么在這樣一個(gè)“信息迷宮”里,如何才能把握自己需要的信息將會(huì)是最大的問題。雖然各個(gè)網(wǎng)站上的信息數(shù)不盡數(shù),但是在沒有搜索引擎的時(shí)代,用戶希望尋找某方面的信息,就必須通過各種途徑或者網(wǎng)站之間的超鏈接進(jìn)行尋找??梢哉f,脫離了搜索引擎的網(wǎng)站都是一個(gè)一個(gè)的信息孤島,用戶
9、必將面臨巨大的搜尋成本,必須付出大量的時(shí)間和精力。搜索引擎的出現(xiàn)改變了這一切,它通過程序的自動(dòng)搜尋并建立索引,將這些信息孤島聯(lián)系起來,形成了一張網(wǎng),并且運(yùn)用分布式計(jì)算的巨大力量,能夠讓用戶從海量數(shù)據(jù)中摒除垃圾信息,獲取想要的知識(shí)。搜索引擎不僅僅是節(jié)省了用戶的時(shí)間,通過挖掉搜尋成本這座墻,它讓許許多多的不可能成為可能人們可以利用搜索引擎,獲得更加全面、詳盡的信息,參考性和點(diǎn)撥性都很強(qiáng)。因此,相當(dāng)一部分職場(chǎng)人士表示,搜索引擎當(dāng)之無愧是他們工作中非常完美的助手。如今,越來越多的白領(lǐng)已把獲取信息的途徑,從直接上門戶網(wǎng)站、社區(qū)轉(zhuǎn)向了搜索引擎工具。使用字典等工具書,上圖書館查閱資料的歷史,逐漸從白領(lǐng)們的生
10、活中淡出了。本地搜索引擎的意義任何有用信息獲取后,最終都要存儲(chǔ)在硬盤中。隨著信息量的不斷增加,硬盤的容量也成指數(shù)增長(zhǎng),我們從硬盤中查找信息的難度也變得越開越困難。要想在越來越大硬盤里,從海量的資料中查找自己感興趣的文檔信息絕非一件易事,而操作系統(tǒng)中自帶的搜索器又不能完全滿足我們的需求,它們存在的共同問題是速度慢且不能由用戶選擇使用偏好。于是人們也開始考慮針對(duì)本地文件搜索的全文檢索軟件,能夠幫助用戶方便地在越來越大的硬盤里,從海量的資料中查找自己感興趣的文檔。這樣的一款全文檢索軟件就是我們熟悉的桌面搜索引擎。對(duì)于人們的生活、工作、休閑等方方面面,桌面搜索引擎的服務(wù)性也更加凸顯。正因?yàn)樽烂嫠阉鞯谋?/p>
11、捷性,給生活節(jié)奏日益加快的人們提供了很大的便利。在繁忙的工作中,你不需要花費(fèi)太大精力來維護(hù)盤中的無數(shù)文件信息,當(dāng)你查找想要的信息時(shí),只需要在電腦上點(diǎn)幾下就可以了。桌面搜索引擎的存在就好像圖書館中的書目檢索系統(tǒng)一樣,如果沒有書目檢索系統(tǒng),圖書管理就會(huì)是一團(tuán)混亂,沒有人能找到自己想要看的書,即使你的藏書再多也不會(huì)吸引來讀者的。硬盤文件系統(tǒng)也是一樣的道理,文件系統(tǒng)中包含著大大小小無數(shù)的文件,然而,如果沒有桌面搜索引擎這件利器,人們縱然知道自己想要找的東西就在那里,但是也不一定能及時(shí)有效的找到自己想要的。桌面搜索引擎的現(xiàn)狀桌面搜索是2004年搜索引擎領(lǐng)域的熱門詞匯之一,已經(jīng)成為主要搜索引擎新的競(jìng)爭(zhēng)領(lǐng)域
12、。桌面搜索的特點(diǎn)在于將搜索方位延伸到自己電腦硬盤中所存儲(chǔ)的各種文檔,例如雅虎的桌面搜索引擎所支持文檔格式包括的Email、Word、Excel、PowerPoint、PDF等等多達(dá)200多種格式的文本、音樂、圖片和網(wǎng)頁。該軟件允許用戶根據(jù)自己的風(fēng)格控制搜索習(xí)慣,并且在用戶的隱私方面也有獨(dú)到的保護(hù)措施。2004年10月份,主流搜索引擎Google率先推出桌面搜索工具,緊接著MSN也推出了同類產(chǎn)品,雅虎則在2005年1月11日發(fā)布了自己的桌面搜索工具。其實(shí),早在2004年3月份Lycos/Hotbot發(fā)布了一款桌面搜索工具-HotBot Desktop,但由于其影響力有限,直到Google桌面搜索
13、推出之后才受到業(yè)內(nèi)的廣泛重視。國(guó)內(nèi)的中搜則于2004年2月發(fā)布了全球第一款搜索桌面軟件網(wǎng)絡(luò)豬,并于2004年12月下旬初發(fā)布了3.0版本。以后,百度、微軟也發(fā)布了桌面搜索引擎。 百度硬盤搜索是一款搜索硬盤資料的軟件,全面支持中文分詞,能夠快速、準(zhǔn)確地幫助用戶從個(gè)人電腦中查找到想要的信息,包括文件、電子郵件以及網(wǎng)頁瀏覽歷史等。更為重要的是,百度硬盤搜索為用戶提供了密碼保護(hù)功能。雅虎桌面搜索精靈可以在任何應(yīng)用程序中選中文字,然后將鼠標(biāo)移動(dòng)到桌面搜索精靈上進(jìn)行搜索,或者直接按下桌面搜索精靈的熱鍵進(jìn)行搜索;也不用事先打開任何瀏覽器,不用將選中的文字復(fù)制出來再粘貼過去;速度快,體積小也是其最大的特點(diǎn)。G
14、oogle桌面搜索引擎可以在你的桌面查看個(gè)性化新聞、圖片及其他內(nèi)容,在你所有的計(jì)算機(jī)范圍內(nèi)搜索文件,直接通過補(bǔ)充工具欄與你的朋友共享信息,查找你的電子郵件、文件、照片、Web 歷史記錄、Email 及其他內(nèi)容。本文簡(jiǎn)介本文首先簡(jiǎn)單介紹了基于因特網(wǎng)的搜索引擎,然后著重介紹了桌面搜索引擎和全文檢索的相關(guān)知識(shí),對(duì)基于Lucene的全文檢索引擎的架構(gòu)原理方面進(jìn)行詳細(xì)的說明,同時(shí)對(duì)Lucene的索引機(jī)制、系統(tǒng)結(jié)構(gòu),以及中文分詞都進(jìn)行了仔細(xì)分析。然后介紹了本文實(shí)現(xiàn)的一個(gè)基于Lucene的桌面搜索引擎。本桌面搜索引擎一個(gè)輕量級(jí)的全文檢索軟件,能夠幫助用戶方便地在越來越大硬盤里,從海量的資料中查找自己感興趣的
15、文檔。從指定的文件路徑中按照目錄層次進(jìn)行解析、搜索,并把搜索到的每條信息進(jìn)行索引后加入索引文件,然后通過Web服務(wù)器接受客戶端請(qǐng)求后從索引文件中搜索出所匹配的信息。1. 桌面搜索引擎與全文檢索1.1 搜索引擎的概念及發(fā)展搜索引擎的概念對(duì)于網(wǎng)民來說,幾乎每天都要用到它,也正是它,締造了今天的Google、百度、雅虎,說道這里你可能已經(jīng)知道它指的就是搜索引擎。習(xí)慣上,人們認(rèn)為網(wǎng)絡(luò)搜索引擎是進(jìn)行查詢網(wǎng)站或網(wǎng)頁信息的站點(diǎn)或工具,這是一種狹義的定義。廣義地說,搜索引擎是指在互聯(lián)網(wǎng)上或通過互聯(lián)網(wǎng)能夠響應(yīng)用戶提交的搜索請(qǐng)求,返回相應(yīng)查詢結(jié)果的信息技術(shù)和系統(tǒng),這里所說的信息可以是任意的信息,如網(wǎng)站信息、商品信
16、息等等。搜索引擎的發(fā)展搜索引擎是能夠從互聯(lián)網(wǎng)上收集信息,并為用戶提供查詢服務(wù)的軟件系統(tǒng)。搜索引擎對(duì)原始文檔進(jìn)行著一系列的整理和處理。用戶的查詢結(jié)果是搜索引擎按照某種規(guī)則計(jì)算獲得的。搜索引擎為用戶提供了資源查找和導(dǎo)航的有效手段。搜索引擎的雛形階段:最早是在1990年,出現(xiàn)了互聯(lián)網(wǎng)信息檢索工具Archie系統(tǒng),這個(gè)系統(tǒng)搜集的信息資源不是網(wǎng)頁,但原理和現(xiàn)在的搜索引擎原理一致,具備信息資源自動(dòng)搜集、信息處理和索引、提供資源檢索服務(wù)功能。Archie是公認(rèn)的現(xiàn)代意義上的搜索引擎的祖先。第一代搜索引擎:互聯(lián)網(wǎng)上的第一代搜索引擎創(chuàng)造了一段全新的互聯(lián)網(wǎng)歷史。這個(gè)階段的搜索引擎以Alavista、YAHOO、和
17、Infoseek為代表,主要靠人工目錄分類。由于人工分類很難處理海量信息,搜索結(jié)果的好壞往往用反饋結(jié)果的數(shù)量來衡量。所后的幾年內(nèi)相繼出現(xiàn)了Lycos、AltaVista、等系統(tǒng)。這些系統(tǒng)各有特點(diǎn),成為當(dāng)時(shí)重要的搜索導(dǎo)航工具。有的還提供了網(wǎng)絡(luò)蜘蛛功能,真正實(shí)現(xiàn)了索引內(nèi)容的動(dòng)態(tài)更新,收錄的數(shù)量也快速增加。第二代搜索引擎:互聯(lián)網(wǎng)的第二代搜索引擎也伴隨著互聯(lián)網(wǎng)內(nèi)容的指數(shù)增長(zhǎng)而出現(xiàn)。第一代由于技術(shù)的限制,很難覆蓋互聯(lián)網(wǎng)的大部分網(wǎng)站。鏈接分析技術(shù)的引入,真正提高了自動(dòng)搜索引擎的結(jié)果質(zhì)量。第二代搜索引擎以自動(dòng)抓取和自動(dòng)排序檢索為特征。這個(gè)階段最成功的產(chǎn)品之一就是Google。Google占據(jù)大量的用戶和市場(chǎng)
18、份額。第三代搜索引擎:互聯(lián)網(wǎng)上的第三代搜索引擎正在發(fā)展形成當(dāng)中,第三代搜索引擎具有的特征正在探討當(dāng)中。個(gè)性化、分類劃、智能化是比較認(rèn)同的特征。如果我們相信互聯(lián)網(wǎng)會(huì)有百年,如果我們相信互聯(lián)網(wǎng)會(huì)長(zhǎng)存,我們就應(yīng)該看見只有十幾年歷史的搜索引擎就像個(gè)幼稚孩子,一定會(huì)有巨大的令人震驚的改變。隨著互聯(lián)網(wǎng)規(guī)模的急劇膨脹,一家搜索引擎光靠自己?jiǎn)未颡?dú)斗已無法適應(yīng)目前的市場(chǎng)狀況,因此現(xiàn)在搜索引擎之間開始出現(xiàn)了分工協(xié)作,并有了專業(yè)的搜索引擎技術(shù)和搜索數(shù)據(jù)庫(kù)服務(wù)提供商。從這個(gè)意義上說,它們是搜索引擎的搜索引擎。1.2 桌面搜索引擎簡(jiǎn)介1.2.1 Windows自帶搜索功能的不足使用windows操作系統(tǒng)的朋友們經(jīng)常會(huì)用
19、到windows操作系統(tǒng)自帶的搜索功能來查找自己想要的文件,但所有的使用者或多或少都會(huì)有這樣的困惑,有時(shí)候會(huì)忘了自己的文件放到哪個(gè)文件夾下,因而只能全盤查找,而查找的速度足以讓你在等待結(jié)果的期間再美美的睡上一覺。下面將介紹一下windows自帶搜索的不足首先是搜索速度的問題,由于Windows自帶的搜索功能的原理采用的是字符串匹配,所以當(dāng)你對(duì)一個(gè)幾十G的硬盤進(jìn)行查找那將是一件耗時(shí)的事情。其次你不能建立自己的用戶查找偏好, 你的查找總是按照操作系統(tǒng)指定的路徑查找,當(dāng)你忘了自己的文件放在那里時(shí),那將是更可怕的事,你恐怕要進(jìn)行全盤查找。再次例搜索所支持文檔格式不能完全滿足用戶的需要,如果你想隨心所欲
20、的查找你想要的文件格式,恐怕你要另尋出路了。1.2.2 我們需要一款桌面搜索引擎盡管Windows自帶的搜索很不方便,但依然有大量的用戶存在,原因是桌面搜索是我們經(jīng)常要做的一件事。為了能夠克服Windows自帶搜索的不足,我們迫切需要一款全新的桌面搜索引擎。桌面搜索是2004年搜索引擎領(lǐng)域的熱門詞匯之一,已經(jīng)成為主要搜索引擎新的競(jìng)爭(zhēng)領(lǐng)域。2004年10月份,主流搜索引擎Google率先推出桌面搜索工具,緊接著MSN也推出了同類產(chǎn)品,雅虎則在2005年1月11日發(fā)布了自己的桌面搜索工具。其實(shí),早在2004年3月份Lycos/Hotbot發(fā)布了一款桌面搜索工具-HotBot Desktop,但由于
21、其影響力有限,直到Google桌面搜索推出之后才受到業(yè)內(nèi)的廣泛重視。國(guó)內(nèi)的中搜則于2004年2月發(fā)布了全球第一款搜索桌面軟件網(wǎng)絡(luò)豬,并于2004年12月下旬初發(fā)布了3.0版本桌面搜索的特點(diǎn)在于將搜索方位延伸到自己電腦硬盤中所存儲(chǔ)的各種文檔,例如雅虎的桌面搜索引擎所支持文檔格式包括的Email、Word、Excel、PowerPoint、PDF等等多達(dá)200多種格式的文本、音樂、圖片和網(wǎng)頁。該軟件允許用戶根據(jù)自己的風(fēng)格控制搜索習(xí)慣,并且在用戶的隱私方面也有獨(dú)到的保護(hù)措施。盡管目前在技術(shù)和應(yīng)用方面還存在一定的問題,但桌面搜索已經(jīng)成為一個(gè)被普遍看好的熱門市場(chǎng),因?yàn)榉?wù)商相信桌面搜索比傳統(tǒng)的基于瀏覽器
22、的搜索引擎有助于增加消費(fèi)者的忠誠(chéng)度,并為發(fā)布個(gè)性化廣告奠定基礎(chǔ)在這方面,可能有點(diǎn)類似于即使信息的廣告形式,這也是各種網(wǎng)絡(luò)服務(wù)工具相互影響、相互吸收優(yōu)點(diǎn)的發(fā)展所致。1.2.3 桌面搜索引擎現(xiàn)狀Google桌面搜索Google桌面搜索引擎讓人第一感覺就是小,僅有出頭。簡(jiǎn)潔的界面與Google的網(wǎng)頁搜索一脈相承,體現(xiàn)了“簡(jiǎn)單即美”的概念。Google 桌面搜索需要運(yùn)行于瀏覽器中,你可以通過雙擊Windows工具欄中的小圖標(biāo)來快速調(diào)用它,它的界面中同時(shí)提供了“搜索桌面”和“搜索所有網(wǎng)站”兩個(gè)按鈕。特點(diǎn):它可以在你的桌面查看個(gè)性化新聞、圖片及其他內(nèi)容,在你所有的計(jì)算機(jī)范圍內(nèi)搜索文件,直接通過補(bǔ)充工具欄與
23、你的朋友共享信息,查找你的電子郵件、文件、照片、Web 歷史記錄、Email 及其他內(nèi)容。百度硬盤搜索百度硬盤搜索與百度在線搜索的界面非常相似,只是增加了“硬盤”選項(xiàng),在關(guān)鍵字輸入框的下方,可以看到本地資料搜索的類別分別是:所有、郵件、文檔、網(wǎng)頁、影音、圖片、聊天、其他等類。對(duì)于郵件,它支持 郵件,文檔則支持、等格式。特點(diǎn):百度硬盤搜索是一款搜索硬盤資料的軟件,全面支持中文分詞,能夠快速、準(zhǔn)確地幫助用戶從個(gè)人電腦中查找到想要的信息,包括文件、電子郵件以及網(wǎng)頁瀏覽歷史等。更為重要的是,百度硬盤搜索為用戶提供了密碼保護(hù)功能。雅虎桌面搜索精靈同一樣,雅虎桌面搜索精靈也是一款小巧的搜索工具軟件。對(duì)于搜
24、到的結(jié)果,它在窗口右邊專門提供了一個(gè)預(yù)覽區(qū),可以迅速顯示所選中文件的內(nèi)容,讓你判斷該文件是否就是想要找的文件。而且它在預(yù)覽窗格的上方提供了打開文件、郵件發(fā)送、打印、刪除等快捷按鈕,相當(dāng)醒目易用。特點(diǎn):你可以在任何應(yīng)用程序中選中文字,然后將鼠標(biāo)移動(dòng)到桌面搜索精靈上進(jìn)行搜索,或者直接按下桌面搜索精靈的熱鍵進(jìn)行搜索;也不用事先打開任何瀏覽器,不用將選中的文字復(fù)制出來再粘貼過去;速度快,體積小也是其最大的特點(diǎn)。1.3 全文檢索 1.3.1 什么是全文檢索與全文檢索系統(tǒng) 全文檢索是指計(jì)算機(jī)索引程序通過掃描文章中的每一個(gè)詞,對(duì)每一個(gè)詞建立一個(gè)索引,指明該詞在文章中出現(xiàn)的次數(shù)和位置,當(dāng)用戶查詢時(shí),
25、檢索程序就根據(jù)事先建立的索引進(jìn)行查找,并將查找的結(jié)果反饋給用戶的檢索方式。這個(gè)過程類似于通過字典中的檢索字表查字的過程。全文檢索的方法主要分為按字檢索和按詞檢索兩種。按字檢索是指對(duì)于文章中的每一個(gè)字都建立索引,檢索時(shí)將詞分解為字的組合。對(duì)于各種不同的語言而言,字有不同的含義,比如英文中字與詞實(shí)際上是合一的,而中文中字與詞有很大分別。按詞檢索指對(duì)文章中的詞,即語義單位建立索引,檢索時(shí)按詞檢索,并且可以處理同義項(xiàng)等。英文等西方文字由于按照空白切分詞,因此實(shí)現(xiàn)上與按字處理類似,添加同義處理也很容易。中文等東方文字則需要切分字詞,以達(dá)到按詞索引的目的,關(guān)于這方面的問題,是當(dāng)前全文檢索技術(shù)尤其是中文全文
26、檢索技術(shù)中的難點(diǎn),在此不做詳述。全文檢索系統(tǒng)是按照全文檢索理論建立起來的用于提供全文檢索服務(wù)的軟件系統(tǒng)。一般來說,全文檢索需要具備建立索引和提供查詢的基本功能,此外現(xiàn)代的全文檢索系統(tǒng)還需要具有方便的用戶接口、面向WWW1的開發(fā)接口、二次應(yīng)用開發(fā)接口等等。功能上,全文檢索系統(tǒng)核心具有建立索引、處理查詢返回結(jié)果集、增加索引、優(yōu)化索引結(jié)構(gòu)等等功能,外圍則由各種不同應(yīng)用具有的功能組成。結(jié)構(gòu)上,全文檢索系統(tǒng)核心具有索引引擎、查詢引擎、文本分析引擎、對(duì)外接口等等,加上各種外圍應(yīng)用系統(tǒng)等等共同構(gòu)成了全文檢索系統(tǒng)。圖1.1展示了上述全文檢索系統(tǒng)的結(jié)構(gòu)與功能。在上圖中,我們看到:全文檢索系統(tǒng)中最為關(guān)鍵的部分是全
27、文檢索引擎,各種應(yīng)用程序都需要建立在這個(gè)引擎之上。一個(gè)全文檢索應(yīng)用的優(yōu)異程度,根本上由全文檢索引擎來決定。因此提升全文檢索引擎的效率即是我們提升全文檢索應(yīng)用的根本。另一個(gè)方面,一個(gè)優(yōu)異的全文檢索引擎,在做到效率優(yōu)化的同時(shí),還需要具有開放的體系結(jié)構(gòu),以方便程序員對(duì)整個(gè)系統(tǒng)進(jìn)行優(yōu)化改造,或者是添加原有系統(tǒng)沒有的功能。比如在當(dāng)今多語言處理的環(huán)境下,有時(shí)需要給全文檢索系統(tǒng)添加處理某種語言或者文本格式的功能,比如在英文系統(tǒng)中添加中文處理功能,在純文本系統(tǒng)中添加XML2或者HTML3格式的文本處理功能,系統(tǒng)的開放性和擴(kuò)充性就十分的重要。1.3.2 全文檢索原理全文檢索是對(duì)大數(shù)據(jù)文本進(jìn)行索引,在建立的索引中
28、對(duì)要查找的單詞進(jìn)行進(jìn)行搜索,定位哪些文本數(shù)據(jù)包括要搜索的單詞。因此,全文檢索的全部工作就是建立索引和在索引中搜索定位,所有的工作都是圍繞這兩個(gè)來進(jìn)行的。下面就逐個(gè)介紹建立全文索引中有兩項(xiàng)非常重要,一個(gè)是如何對(duì)文本進(jìn)行分詞,一是建立索引的數(shù)據(jù)結(jié)構(gòu)。分詞的方法基本上是二元分詞法、最大匹配法和統(tǒng)計(jì)方法。索引的數(shù)據(jù)結(jié)構(gòu)基本上采用倒排索引的結(jié)構(gòu)。分詞的好壞關(guān)系到查詢的準(zhǔn)確程度和生成的索引的大小。在中文分詞發(fā)展中,早期經(jīng)常使用分詞方式是二元分詞法,該方法的基本原理是將包含中文的句子進(jìn)行二元分割,不考慮單詞含義,只對(duì)二元單詞進(jìn)行索引。因此該方法所分出的單詞數(shù)量較多,從而產(chǎn)生的索引數(shù)量巨大,查詢中會(huì)將無用的數(shù)
29、據(jù)檢索出來,好處是算法簡(jiǎn)單不會(huì)漏掉檢索的數(shù)據(jù)。之后又發(fā)展出最大匹配分詞方法,該方法又分為正向最大分詞和逆向最大分詞。其原理和查字典類似,對(duì)常用單詞生成一個(gè)詞典,分析句子的過程中最大的匹配字典中的單詞,從而將句子拆分為有意義的單詞鏈。最大匹配法中正向分詞方法對(duì)偏正式詞語的分辨容易產(chǎn)生錯(cuò)誤,比如“首飾和服裝”會(huì)將“和服”作為單詞分出。達(dá)夢(mèng)數(shù)據(jù)庫(kù)采用的是改進(jìn)的逆向最大分詞方法,該分詞方法較正向正確率有所提高。最為復(fù)雜的是通過統(tǒng)計(jì)方式進(jìn)行分詞的方法。該方法采用隱式馬爾科夫鏈,也就是后一個(gè)單詞出現(xiàn)的概率依靠于前一個(gè)單詞出現(xiàn)的概率,最后統(tǒng)計(jì)所有單詞出現(xiàn)的概率的最大為分詞的依據(jù)。這個(gè)方法對(duì)新名詞和地名的識(shí)別
30、要遠(yuǎn)遠(yuǎn)高于最大匹配法,準(zhǔn)確度隨著取樣文本的數(shù)量的增大而提高。 二元分詞方法和統(tǒng)計(jì)方法是不依賴于詞典的,而最大匹配法分詞方法是依賴于詞典的,詞典的內(nèi)容決定分詞結(jié)構(gòu)的好壞。全文檢索的索引被稱為倒排索引,之所以成為倒排索引,是因?yàn)閷⒚恳粋€(gè)單詞作為索引項(xiàng),根據(jù)該索引項(xiàng)查找包含該單詞的文本。因此,索引都是單詞和唯一記錄文本的標(biāo)示是一對(duì)多的關(guān)系。將索引單詞排序,根據(jù)排序后的單詞定位包含該單詞的文本。逆向分詞的過程說明步驟1)讀取一整條句子到變量str中,轉(zhuǎn)到步驟2 步驟2)從句子的尾端讀取1個(gè)字到變量word中,轉(zhuǎn)到步驟3步驟3)在字典查找word中保存的單詞。如果存在則保存word,轉(zhuǎn)到步驟4,否則轉(zhuǎn)到
31、步驟5)步驟4)如果是字典中最大單詞或者超過最大單詞數(shù)(認(rèn)定為新詞),從句尾去掉該單詞,返回步驟2步驟5)讀取前一個(gè)字到word中,構(gòu)成新單詞,轉(zhuǎn)到步驟3)詞庫(kù)的內(nèi)存數(shù)據(jù)結(jié)構(gòu)和詞庫(kù)中單詞的匹配算法內(nèi)存中單詞采用層次結(jié)構(gòu)保存假設(shè)字典中有如下的單詞中國(guó)、中華民國(guó)、國(guó)家、人民、民主在內(nèi)存中按照如下方式按層排列,其中每一個(gè)方塊代表一個(gè)字,箭頭所指向?yàn)樵搯蔚那耙粋€(gè)字單詞按照如下方式匹配比如查找單詞“中華民國(guó)”,首先在第一層中使用二分法找到“國(guó)”字,獲得“國(guó)”下層的數(shù)組“中民”,在該層使用二分法查找“民”,獲得“民”下層的數(shù)組“華”,在該層使用二分法查找“華”,獲得“華”下層的數(shù)組“中”,最后在該層找到中
32、,至此,但此匹配完畢。索引的格式索引的格式是倒排索引的格式,也就是一個(gè)單詞對(duì)應(yīng)若干個(gè)文本表示。,在達(dá)夢(mèng)數(shù)據(jù)庫(kù)中,建立全文索引的對(duì)象是rec中的字段,生成倒排索引使用數(shù)據(jù)庫(kù)中的b樹進(jìn)行存儲(chǔ)。在數(shù)據(jù)庫(kù)是對(duì)某個(gè)字符字段進(jìn)行全文索引,因此,rec的rowid作為該rec上該field的標(biāo)示是必須要被記錄的。因此倒排索引存儲(chǔ)的格式如下。全文索引的查詢 全文的索引查詢首先將對(duì)要查詢的單詞進(jìn)行分詞,然后在存儲(chǔ)倒排索引的b樹中將包含這些單詞的rowid全部查找出來,并根據(jù)這些rowid在存儲(chǔ)實(shí)際數(shù)據(jù)的b樹中,將包含這些數(shù)據(jù)的行過濾出來。處理流程按照如下描述:1.3.3 全文檢索的倒排索引原理為什么我
33、們要說倒排索引呢? 因?yàn)榈古潘饕悄壳八阉饕婀咀顚?duì)搜索引擎最常用的存儲(chǔ)方式,也是搜索引擎的核心內(nèi)容!在搜索引擎實(shí)際的引用之中,有時(shí)需要按照關(guān)鍵字的某些值查找記錄,所以我們是按照關(guān)鍵字建立索引,這個(gè)索引我們就稱之為:倒排索引,而帶有倒排索引的文件我們又稱作:倒排索引文件 也可以叫它為:倒排文件,來實(shí)現(xiàn)快速的檢索與高速的效率!什么是倒排表呢?倒排文件中的 次關(guān)鍵字索引 我們稱做: 倒排表其主要優(yōu)點(diǎn)是: 在處理復(fù)雜的多關(guān)鍵字查詢時(shí),可在倒排表中先完成查詢的交、并等邏輯運(yùn)算,得到結(jié)果后再對(duì)記錄進(jìn)行存取。這樣不必對(duì)每個(gè)記錄隨機(jī)存取,把對(duì)記錄的查詢轉(zhuǎn)換為地址集合的運(yùn)算,從而提高查找速度!下面就是整個(gè)倒
34、排表的建立過程(組圖):1.數(shù)據(jù)表2.索引表3.右項(xiàng)歸并后的索引表怎樣建立倒排索引呢?關(guān)于建立倒排索引其實(shí)就象我們寫一本小說一樣,目錄是章節(jié)標(biāo)題對(duì)應(yīng)的頁碼 對(duì)全文搜索來講,倒排索引就是詞對(duì)應(yīng)文檔編號(hào)!下面我們舉個(gè)例子: 案例1:普通文檔存在形式:PPT(從頭到尾)=> keywords1, keywords2, keywords3, keywords4,keywords5案例2:倒排索引翻轉(zhuǎn)后的結(jié)果顯示: keywords1, keywords2, keywords3, keywords4,keywords5 (直接找關(guān)鍵字 然后在找內(nèi)容頁)=> PPT再簡(jiǎn)單點(diǎn)講:我們隨便看什么書
35、,我想因該是分2種看法,一種是從頭到尾法! 而另一種就 先看目錄看那些是我需要看的那么直接就翻到該頁面!不然和第一個(gè)人一樣從頭一直看 ,看到你想要看的,那不是前面時(shí)間都浪費(fèi)了?目錄就起了個(gè)關(guān)鍵作用!2. 開放源代碼的全文檢索引擎架構(gòu)Lucene2.1 Lucene簡(jiǎn)介2.1.1 什么是LuceneLucene是apache軟件基金會(huì)jakarta項(xiàng)目組的一個(gè)子項(xiàng)目,是一個(gè)開放源代碼的全文檢索引擎工具包,即它不是一個(gè)完整的全文檢索引擎,而是一個(gè)全文檢索引擎的架構(gòu),提供了完整的查詢引擎和索引引擎,部分文本分析引擎(英文與德文兩種西方語言)。Lucene的目的是為軟件開發(fā)人員提供一個(gè)簡(jiǎn)單易用的工具包
36、,以方便的在目標(biāo)系統(tǒng)中實(shí)現(xiàn)全文檢索的功能,或者是以此為基礎(chǔ)建立起完整的全文檢索引擎。 Lucene的原作者是Doug Cutting,他是一位資深全文索引/檢索專家,曾經(jīng)是V-Twin搜索引擎的主要開發(fā)者,后在Excite擔(dān)任高級(jí)系統(tǒng)架構(gòu)設(shè)計(jì)師,目前從事于一些Internet底層架構(gòu)的研究。早先發(fā)布在作者自己的,后來發(fā)布在SourceForge,2001年年底成為apache軟件基金會(huì)jakarta的一個(gè)子項(xiàng)目:/lucene/。2.1.2 Lucene的應(yīng)用、特點(diǎn)及優(yōu)勢(shì)作為一個(gè)開放源代碼項(xiàng)目,Lucene從問世之后,引發(fā)了開放源代碼社群的巨大反
37、響,程序員們不僅使用它構(gòu)建具體的全文檢索應(yīng)用,而且將之集成到各種系統(tǒng)軟件中去,以及構(gòu)建Web應(yīng)用,甚至某些商業(yè)軟件也采用了Lucene作為其內(nèi)部全文檢索子系統(tǒng)的核心。apache軟件基金會(huì)的網(wǎng)站使用了Lucene作為全文檢索的引擎,IBM的開源軟件eclipse9的2.1版本中也采用了Lucene作為幫助子系統(tǒng)的全文索引引擎,相應(yīng)的IBM的商業(yè)軟件Web Sphere10中也采用了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定
38、義了一套以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)
39、實(shí)現(xiàn)了布爾操作、模糊查詢(Fuzzy Search)、分組查詢等等。 面對(duì)已經(jīng)存在的商業(yè)全文檢索引擎,Lucene也具有相當(dāng)?shù)膬?yōu)勢(shì)。首先,它的開發(fā)源代碼發(fā)行方式(遵守Apache Software License12),在此基礎(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è)合理而極具
40、擴(kuò)充能力的面向?qū)ο蠹軜?gòu),程序員可以在Lucene的基礎(chǔ)上擴(kuò)充各種功能,比如擴(kuò)充中文處理能力,從文本擴(kuò)充到HTML、PDF13等等文本格式的處理,編寫這些擴(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 framework14),在遵守Lu
41、cene索引文件格式的基礎(chǔ)上,使得Lucene能夠運(yùn)行在各種各樣的平臺(tái)上,系統(tǒng)管理員可以根據(jù)當(dāng)前的平臺(tái)適合的語言來合理的選擇。2.2 Lucene系統(tǒng)結(jié)構(gòu)分析Lucene作為一個(gè)優(yōu)秀的全文檢索引擎,其系統(tǒng)結(jié)構(gòu)具有強(qiáng)烈的面向?qū)ο筇卣?。首先是定義了一個(gè)與平臺(tái)無關(guān)的索引文件格式,其次通過抽象將系統(tǒng)的核心組成部分設(shè)計(jì)為抽象類,具體的平臺(tái)實(shí)現(xiàn)部分設(shè)計(jì)為抽象類的實(shí)現(xiàn),此外與具體平臺(tái)相關(guān)的部分比如文件存儲(chǔ)也封裝為類,經(jīng)過層層的面向?qū)ο笫降奶幚?,最終達(dá)成了一個(gè)低耦合高效率,容易二次開發(fā)的檢索引擎系統(tǒng)。以下將討論Lucene系統(tǒng)的結(jié)構(gòu)組織,并給出系統(tǒng)結(jié)構(gòu)與源碼組織圖:
42、0; 從圖中我們清楚的看到,Lucene的系統(tǒng)由基礎(chǔ)結(jié)構(gòu)封裝、索引核心、對(duì)外接口三大部分組成。其中直接操作索引文件的索引核心又是系統(tǒng)的重點(diǎn)。Lucene的將所有源碼分為了7個(gè)模塊(在java語言中以包即package來表示),各個(gè)模塊所屬的系統(tǒng)部分也如上圖所示。需要說明的是org.apache.lucene.queryPaser是做為org.apache.lucene.search的語法解析器存在,不被系統(tǒng)之外實(shí)際調(diào)用,因此這里沒有當(dāng)作對(duì)外接口看待,而是將之獨(dú)立出來。 從面象對(duì)象的觀點(diǎn)來考察,Lucene應(yīng)用了最基本的一條程序設(shè)計(jì)準(zhǔn)則:引入額外的
43、抽象層以降低耦合性。首先,引入對(duì)索引文件的操作org.apache.lucene.store的封裝,然后將索引部分的實(shí)現(xiàn)建立在(org.apache.lucene.index)其之上,完成對(duì)索引核心的抽象。在索引核心的基礎(chǔ)上開始設(shè)計(jì)對(duì)外的接口org.apache.lucene.search與org.apache.lucene.analysis。在每一個(gè)局部細(xì)節(jié)上,比如某些常用的數(shù)據(jù)結(jié)構(gòu)與算法上,Lucene也充分的應(yīng)用了這一條準(zhǔn)則。在高度的面向?qū)ο罄碚摰闹蜗?,使得Lucene的實(shí)現(xiàn)容易理解,易于擴(kuò)展。Lucene在系統(tǒng)結(jié)構(gòu)上的另一個(gè)特點(diǎn)表現(xiàn)為其引入了傳統(tǒng)的客戶端服務(wù)器結(jié)構(gòu)以外的的應(yīng)用結(jié)構(gòu)。L
44、ucene可以作為一個(gè)運(yùn)行庫(kù)被包含進(jìn)入應(yīng)用本身中去,而不是做為一個(gè)單獨(dú)的索引服務(wù)器存在。這自然和Lucene開放源代碼的特征分不開,但是也體現(xiàn)了Lucene在編寫上的本來意圖:提供一個(gè)全文索引引擎的架構(gòu),而不是實(shí)現(xiàn)。Lucene的API接口設(shè)計(jì)的比較通用,輸入輸出結(jié)構(gòu)都很像數(shù)據(jù)庫(kù)的表=>記錄=>字段,所以很多傳統(tǒng)的應(yīng)用的文件、數(shù)據(jù)庫(kù)等都可以 比較方便的映射到Lucene的存儲(chǔ)結(jié)構(gòu)/接口中??傮w上看:可以先把Lucene當(dāng)成一個(gè)支持全文索引的數(shù)據(jù)庫(kù)系統(tǒng)。比較一下Lucene和數(shù)據(jù)庫(kù):全文檢索 like "%keyword%" 由于數(shù)據(jù)庫(kù)索引不是為全文索引設(shè)計(jì)的,因
45、此,使用like "%keyword%"時(shí),數(shù)據(jù)庫(kù)索引是不起作用的,在使用like查詢時(shí),搜索過程又變成類似于一頁頁翻書的遍歷過程了,所以對(duì)于含有模糊查詢的數(shù)據(jù)庫(kù) 服務(wù)來說,LIKE對(duì)性能的危害是極大的。如果是需要對(duì)多個(gè)關(guān)鍵詞進(jìn)行模糊匹配:like"%keyword1%" and like "%keyword2%" .其效率也就可想而知了。通常比較厚的書籍后面常常附關(guān)鍵詞索引表(比如:北京:12, 34頁,上海:3,77頁),它能夠幫助讀者比較快地找到相關(guān)內(nèi)容的頁碼。而數(shù)據(jù)庫(kù)索引能夠大大提高查詢的速度原理也是一樣,想像一下通過書后面的
46、索 引查找的速度要比一頁一頁地翻內(nèi)容高多少倍而索引之所以效率高,另外一個(gè)原因是它是排好序的。對(duì)于檢索系統(tǒng)來說核心是一個(gè)排序問題。 所以建立一個(gè)高效檢索系統(tǒng)的關(guān)鍵是建立一個(gè)類似于科技索引一樣的反向索引機(jī)制,將數(shù)據(jù)源(比如多篇文章)排序順序存儲(chǔ)的同時(shí),有另外一個(gè)排好序的關(guān)鍵詞 列表,用于存儲(chǔ)關(guān)鍵詞=>文章映射關(guān)系,利用這樣的映射關(guān)系索引:關(guān)鍵詞=>出現(xiàn)關(guān)鍵詞的文章編號(hào),出現(xiàn)次數(shù)(甚至包括位置:起始偏移 量,結(jié)束偏移量),出現(xiàn)頻率,檢索過程就是把模糊查詢變成多個(gè)可以利用索引的精確查詢的邏輯組合的過程。從而大大提高了多關(guān)鍵詞查詢的效率,所以,全文 檢索問題歸結(jié)到最后是一個(gè)排序問題。由此可以
47、看出模糊查詢相對(duì)數(shù)據(jù)庫(kù)的精確查詢是一個(gè)非常不確定的問題,這也是大部分?jǐn)?shù)據(jù)庫(kù)對(duì)全文檢索支持有限的原因。Lucene最核心的特征是通過特殊的索引結(jié)構(gòu)實(shí)現(xiàn)了傳統(tǒng)數(shù)據(jù)庫(kù)不擅長(zhǎng)的全文索引機(jī)制,并提供了擴(kuò)展接口,以方便針對(duì)不同應(yīng)用的定制。2.3 深入Lucene 索引機(jī)制Lucene是一個(gè)高性能的java全文檢索工具包,它使用的是倒排文件索引結(jié)構(gòu)。該結(jié)構(gòu)及相應(yīng)的生成算法如下:一、設(shè)有兩篇文章1和2文章1的內(nèi)容為:Tom lives in Guangzhou,I live in Guangzhou too.文章2的內(nèi)容為:He once lived in Shanghai.二、由于lucene是基于關(guān)鍵詞索
48、引和查詢的,首先我們要取得這兩篇文章的關(guān)鍵詞,通常我們需要如下處理措施1、我們現(xiàn)在有的是文章內(nèi)容,即一個(gè)字符串,我們先要找出字符串中的所有單詞,即分詞。英文單詞由于用空格分隔,比較好處理。中文單詞間是連在一起的需要特殊的分詞處理。2、文章中的”in”, “once” “too”等詞沒有什么實(shí)際意義,中文中的“的”“是”等字通常也無具體含義,這些不代表概念的詞可以過濾掉3.、用戶通常希望查“He”時(shí)能把含“he”,“HE”的文章也找出來,所以所有單詞需要統(tǒng)一大小寫。4、 用戶通常希望查“l(fā)ive”時(shí)能把含“l(fā)ives”,“l(fā)ived”的文章也找出來,所以需要把“l(fā)ives”,“l(fā)ived”還原成
49、“l(fā)ive”5、文章中的標(biāo)點(diǎn)符號(hào)通常不表示某種概念,也可以過濾掉,在lucene中以上措施由Analyzer類完成,經(jīng)過上面處理后 文章1的所有關(guān)鍵詞為:tom live guangzhou live guangzhou 文章2的所有關(guān)鍵詞為:he live shanghai三、 有了關(guān)鍵詞后,我們就可以建立倒排索引了。上面的對(duì)應(yīng)關(guān)系是:“文章號(hào)”對(duì)“文章中所有關(guān)鍵詞”。倒排索引把這個(gè)關(guān)系倒過來,變成:“關(guān)鍵詞”對(duì)“擁有該關(guān)鍵詞的所有文章號(hào)”。文章1,2經(jīng)過倒排后變成關(guān)鍵詞文章號(hào)guangzhou 1he 2i1live 2shanghai 2tom tom 1通常僅知道關(guān)鍵詞在哪些文章中出現(xiàn)
50、還不夠,我們還需要知道關(guān)鍵詞在文章中出現(xiàn)次數(shù)和出現(xiàn)的位置,通常有兩種位置:a)字符位置,即記錄該詞是文章中第幾個(gè)字符(優(yōu)點(diǎn)是關(guān)鍵詞亮顯時(shí)定位快);b)關(guān)鍵詞位置,即記錄該詞是文章中第幾個(gè)關(guān)鍵詞(優(yōu)點(diǎn)是節(jié)約索引空間、詞組(phase)查詢快),lucene 中記錄的就是這種位置。加上“出現(xiàn)頻率”和“出現(xiàn)位置”信息后,我們的索引結(jié)構(gòu)變?yōu)椋宏P(guān)鍵詞文章號(hào)出現(xiàn)位置guangzhou 123,6he 211i114live 12,212,5,2shanghai 213tom 11 1以live 這行為例我們說明一下該結(jié)構(gòu):live在文章1中出現(xiàn)了2次,文章2中出現(xiàn)了一次,它的出現(xiàn)位置為“2,5,2”這表示
51、什么呢?我們需要結(jié)合文章號(hào)和出現(xiàn)頻率來分析,文章1中出現(xiàn)了2次,那么“2,5”就表示live在文章1中出現(xiàn)的兩個(gè)位置,文章2中出現(xiàn)了一次,剩下的“2”就表示live是文章2中第 2個(gè)關(guān)鍵字。以上就是lucene索引結(jié)構(gòu)中最核心的部分。我們注意到關(guān)鍵字是按字符順序排列的(lucene沒有使用B樹結(jié)構(gòu)),因此lucene可以用二元搜索算法快速定位關(guān)鍵詞。實(shí)現(xiàn)時(shí) lucene將上面三列分別作為詞典文件(Term Dictionary)、頻率文件(frequencies)、位置文件 (positions)保存。其中詞典文件不僅保存有每個(gè)關(guān)鍵詞,還保留了指向頻率文件和位置文件的指針,通過指針可以找到該關(guān)
52、鍵字的頻率信息和位置信息。Lucene中使用了field的概念,用于表達(dá)信息所在位置(如標(biāo)題中,文章中,url中),在建索引中,該field信息也記錄在詞典文件中,每個(gè)關(guān)鍵詞都有一個(gè)field信息(因?yàn)槊總€(gè)關(guān)鍵字一定屬于一個(gè)或多個(gè)field)。為了減小索引文件的大小,Lucene對(duì)索引還使用了壓縮技術(shù)。首先,對(duì)詞典文件中的關(guān)鍵詞進(jìn)行了壓縮,關(guān)鍵詞壓縮為<堉?綴長(zhǎng)度,后綴>,例如:當(dāng)前詞為“阿拉伯語”,上一個(gè)詞為“阿拉伯”,那么“阿拉伯語”壓縮為<3,語>。其次大量用到的是對(duì)數(shù)字的壓縮,數(shù)字只保存與上一個(gè)值的差值(這樣可以減小數(shù)字的長(zhǎng)度,進(jìn)而減少保存該數(shù)字需要的字節(jié)數(shù))。
53、例如當(dāng)前文章號(hào)是16389(不壓縮要用3個(gè)字節(jié)保存),上一文章號(hào)是16382,壓縮后保存7(只用一個(gè)字節(jié))。下面我們可以通過對(duì)該索引的查詢來解釋一下為什么要建立索引。假設(shè)要查詢單詞 “l(fā)ive”,lucene先對(duì)詞典二元查找、找到該詞,通過指向頻率文件的指針讀出所有文章號(hào),然后返回結(jié)果。詞典通常非常小,因而,整個(gè)過程的時(shí)間是毫秒級(jí)的。2.4 Lucene文檔分析與中文分詞2.4.1 Lucene分析器原理Lucene分析器全由Analyzer派生而來。Analyzer類構(gòu)建用于分析文本的TokenStream對(duì)象,因此(thus)它表示(represent)用于從文本中分解(extract)出
54、組成索引的terms的一個(gè)規(guī)則器(policy)。典型的(typical)實(shí)現(xiàn)首先創(chuàng)建一個(gè)Tokenizer,它將那些從Reader對(duì)象中讀取字符流(stream of characters)打碎為(break into)原始的Tokens(raw Tokens)。然后一個(gè)或更多的TokenFilters可以應(yīng)用在這個(gè)Tokenizer的輸出上。警告:你必須在你的子類(subclass)中覆寫(override)定義在這個(gè)類中的其中一個(gè)方法,否則的話Analyzer將會(huì)進(jìn)入一個(gè)無限循環(huán)(infinite loop)中。 Standar
55、dAnalyzer類是使用一個(gè)English的stop words列表來進(jìn)行tokenize分解出文本中word,使用StandardTokenizer類分解詞,再加上StandardFilter以及LowerCaseFilter以及StopFilter這些過濾器進(jìn)行處理的這樣一個(gè)Analyzer類的實(shí)現(xiàn)。 2.4.2 中文分詞什么是中文分詞眾所周知,英文是以詞為單位的,詞和詞之間是靠空格隔開,而中文是以字為單位,句子中所有的字連起來才能描述一個(gè)意思。例如,英文句子I am a student,用中文則為:“我是一個(gè)學(xué)生”。計(jì)算機(jī)可以很簡(jiǎn)單通過空格知道student是一個(gè)單詞,但是不能很容易明白“學(xué)”、“生”兩個(gè)字合起來才表示一個(gè)詞。把中文的漢字序列切分成有意義的詞,就是中文分詞,有些人也稱為切詞。我是一個(gè)學(xué)生,分詞的結(jié)果是:我 是 一個(gè) 學(xué)生。 中文分詞技術(shù)現(xiàn)有的分詞技術(shù)可分為三類:基于字符串匹配的分詞 基于理解的分詞 基于統(tǒng)計(jì)的分詞 這篇文章中使用的是基于字符串匹配的分詞技
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 村衛(wèi)生室每室設(shè)備管理制度
- 比亞迪公司封閉式管理制度
- 汽車銷售公司庫(kù)房管理制度
- 燃?xì)夤緂is系統(tǒng)安全管理制度
- 物業(yè)擺放小區(qū)設(shè)備管理制度
- 琴行培訓(xùn)機(jī)構(gòu)安全管理制度
- 電氣公司電網(wǎng)設(shè)備配件管理制度
- 基于云計(jì)算的Oracle數(shù)據(jù)庫(kù)安全策略優(yōu)化-洞察闡釋
- 糧貿(mào)公司倉(cāng)儲(chǔ)倉(cāng)庫(kù)管理制度
- 供應(yīng)鏈智能化與韌性提升-洞察闡釋
- 消費(fèi)者態(tài)度的形成與改變
- 大學(xué)生人際交往調(diào)查報(bào)告課件
- 湖南省長(zhǎng)沙市望城區(qū)2020-2021學(xué)年八年級(jí)下學(xué)期期末考試歷史試卷
- 教學(xué)質(zhì)量檢測(cè)質(zhì)量分析表
- 10kv線路巡視檢查表
- 施工單通用范本
- 六合散-春腳集卷二-方劑加減變化匯總
- 慶陽市北部城區(qū)控制性詳細(xì)規(guī)劃—說明書
- 趣味英語(課堂PPT)
- 五年級(jí)語文下學(xué)期課文內(nèi)容填空專項(xiàng)習(xí)題含答案
- 食品質(zhì)量安全溯源系統(tǒng)技術(shù)方案
評(píng)論
0/150
提交評(píng)論