畢業(yè)論文 基于Lucene的桌面搜索引擎_第1頁
畢業(yè)論文 基于Lucene的桌面搜索引擎_第2頁
畢業(yè)論文 基于Lucene的桌面搜索引擎_第3頁
畢業(yè)論文 基于Lucene的桌面搜索引擎_第4頁
畢業(yè)論文 基于Lucene的桌面搜索引擎_第5頁
已閱讀5頁,還剩38頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、題目: 基于Lucene的桌面搜索引擎學院: 管理科學與工程學院專業(yè): 信息管理與信息系統(tǒng) 摘 要隨著信息資源的高速膨脹和計算機硬件的高速發(fā)展,個人PC存儲容量變的越來越大。要想在越來越大硬盤里,從海量的資料中查找自己感興趣的文檔信息也隨之變得越來越困難。而往往操作系統(tǒng)中自帶的搜索器又不能完全滿足我們的需求,因此我們迫切需要一款全新的桌面搜索引擎來幫助我們。本文首先簡單介紹了基于因特網的搜索引擎的系統(tǒng)結構和原理,然后著重介紹了桌面搜索引擎和全文檢索的相關知識,對基于Lucene的全文檢索引擎的架構原理方面進行詳細的說明,同時對Lucene的索引機制、系統(tǒng)結構,以及中文分詞都進行了仔細分析。然后

2、介紹了本文實現(xiàn)的一個基于Lucene的桌面搜索引擎。本桌面搜索引擎一個輕量級的全文檢索軟件,能夠幫助用戶方便地在越來越大硬盤里,從海量的資料中查找自己感興趣的文檔。從指定的文件路徑中按照目錄層次進行解析、搜索,并把搜索到的每條信息進行索引后加入索引文件,然后通過Web服務器接受客戶端請求后從索引文件中搜索出所匹配的信息。關鍵詞:桌面搜索引擎、倒排索引、lucene、B/S、文本文件AbstractThis article fist introduces the system structure and principle of search engine based on the intern

3、et 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-level dir

4、ectory, 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 technology, b

5、ut 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 桌面搜索引擎簡介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. 開放源代碼的全文檢索引擎架構Lu

6、cene132.1 Lucene簡介132.1.1 什么是Lucene132.1.2 Lucene的應用、特點及優(yōu)勢142.2 Lucene系統(tǒng)結構分析152.3 深入Lucene 索引機制172.4 Lucene文檔分析與中文分詞192.4.1 Lucene分析器原理192.4.2 中文分詞212.5 Lucene的索引效率252.6 從Lucene學到更多263. 基于Lucene的桌面搜索引擎273.1 功能簡介273.2 桌面搜索引擎索引器設計283.2.1 索引器簡介283.2.2 界面設計293.2.2 功能設計303.3 桌面搜索引擎索引器實現(xiàn)313.3.1 解析器實現(xiàn)313.3

7、.2 中文分詞考慮343.3.3 索引器實現(xiàn)353.4 搜索器實現(xiàn)383.4.1 搜索器簡介383.4.2 搜索器界面383.4.3 搜索器實現(xiàn)383.4.4 實例演示393.5 數(shù)據持久化403.5.1 持久化簡介403.5.2 具體實現(xiàn)406. 參考資料41緒 論我們處在一個信息資源高速膨脹的時代,信息爆炸已成為一個全球性的現(xiàn)象。然而,面對極度膨脹的信息量,面對“混沌信息空間”和“數(shù)據過?!钡木薮髩毫Γ藗儗τ谛畔⒌目嗫嘧非蠛推诖鋈婚g變得踟躕了。每天在我們所生活在的這個世界都會出現(xiàn)大量的信息,如果能夠對這些信息做出一些篩選,既可以為我們的廣大用戶提供一些好的知識與信息,也為他們?yōu)榱藢ふ疫@

8、些知識與信息節(jié)省時間與成本.據統(tǒng)計,新產生的信息中有記錄在硬盤等磁存儲介質上,其次分別是膠片、紙張和光存儲介質。也正因為如此各種搜索引擎也應運而生。搜索引擎的意義網絡的出現(xiàn)把世界連接成了一個地球村,信息的傳輸再也不受到時間和空間的限制,但是處在這樣一個信息爆炸的網絡時代,僅僅是每天誕生的新知識,就可能讓一個人一生也學不完。那么在這樣一個“信息迷宮”里,如何才能把握自己需要的信息將會是最大的問題。雖然各個網站上的信息數(shù)不盡數(shù),但是在沒有搜索引擎的時代,用戶希望尋找某方面的信息,就必須通過各種途徑或者網站之間的超鏈接進行尋找??梢哉f,脫離了搜索引擎的網站都是一個一個的信息孤島,用戶必將面臨巨大的搜

9、尋成本,必須付出大量的時間和精力。搜索引擎的出現(xiàn)改變了這一切,它通過程序的自動搜尋并建立索引,將這些信息孤島聯(lián)系起來,形成了一張網,并且運用分布式計算的巨大力量,能夠讓用戶從海量數(shù)據中摒除垃圾信息,獲取想要的知識。搜索引擎不僅僅是節(jié)省了用戶的時間,通過挖掉搜尋成本這座墻,它讓許許多多的不可能成為可能人們可以利用搜索引擎,獲得更加全面、詳盡的信息,參考性和點撥性都很強。因此,相當一部分職場人士表示,搜索引擎當之無愧是他們工作中非常完美的助手。如今,越來越多的白領已把獲取信息的途徑,從直接上門戶網站、社區(qū)轉向了搜索引擎工具。使用字典等工具書,上圖書館查閱資料的歷史,逐漸從白領們的生活中淡出了。本地

10、搜索引擎的意義任何有用信息獲取后,最終都要存儲在硬盤中。隨著信息量的不斷增加,硬盤的容量也成指數(shù)增長,我們從硬盤中查找信息的難度也變得越開越困難。要想在越來越大硬盤里,從海量的資料中查找自己感興趣的文檔信息絕非一件易事,而操作系統(tǒng)中自帶的搜索器又不能完全滿足我們的需求,它們存在的共同問題是速度慢且不能由用戶選擇使用偏好。于是人們也開始考慮針對本地文件搜索的全文檢索軟件,能夠幫助用戶方便地在越來越大的硬盤里,從海量的資料中查找自己感興趣的文檔。這樣的一款全文檢索軟件就是我們熟悉的桌面搜索引擎。對于人們的生活、工作、休閑等方方面面,桌面搜索引擎的服務性也更加凸顯。正因為桌面搜索的便捷性,給生活節(jié)奏

11、日益加快的人們提供了很大的便利。在繁忙的工作中,你不需要花費太大精力來維護盤中的無數(shù)文件信息,當你查找想要的信息時,只需要在電腦上點幾下就可以了。桌面搜索引擎的存在就好像圖書館中的書目檢索系統(tǒng)一樣,如果沒有書目檢索系統(tǒng),圖書管理就會是一團混亂,沒有人能找到自己想要看的書,即使你的藏書再多也不會吸引來讀者的。硬盤文件系統(tǒng)也是一樣的道理,文件系統(tǒng)中包含著大大小小無數(shù)的文件,然而,如果沒有桌面搜索引擎這件利器,人們縱然知道自己想要找的東西就在那里,但是也不一定能及時有效的找到自己想要的。桌面搜索引擎的現(xiàn)狀桌面搜索是2004年搜索引擎領域的熱門詞匯之一,已經成為主要搜索引擎新的競爭領域。桌面搜索的特點

12、在于將搜索方位延伸到自己電腦硬盤中所存儲的各種文檔,例如雅虎的桌面搜索引擎所支持文檔格式包括的Email、Word、Excel、PowerPoint、PDF等等多達200多種格式的文本、音樂、圖片和網頁。該軟件允許用戶根據自己的風格控制搜索習慣,并且在用戶的隱私方面也有獨到的保護措施。2004年10月份,主流搜索引擎Google率先推出桌面搜索工具,緊接著MSN也推出了同類產品,雅虎則在2005年1月11日發(fā)布了自己的桌面搜索工具。其實,早在2004年3月份Lycos/Hotbot發(fā)布了一款桌面搜索工具-HotBot Desktop,但由于其影響力有限,直到Google桌面搜索推出之后才受到業(yè)

13、內的廣泛重視。國內的中搜則于2004年2月發(fā)布了全球第一款搜索桌面軟件網絡豬,并于2004年12月下旬初發(fā)布了3.0版本。以后,百度、微軟也發(fā)布了桌面搜索引擎。百度硬盤搜索是一款搜索硬盤資料的軟件,全面支持中文分詞,能夠快速、準確地幫助用戶從個人電腦中查找到想要的信息,包括文件、電子郵件以及網頁瀏覽歷史等。更為重要的是,百度硬盤搜索為用戶提供了密碼保護功能。雅虎桌面搜索精靈可以在任何應用程序中選中文字,然后將鼠標移動到桌面搜索精靈上進行搜索,或者直接按下桌面搜索精靈的熱鍵進行搜索;也不用事先打開任何瀏覽器,不用將選中的文字復制出來再粘貼過去;速度快,體積小也是其最大的特點。Google桌面搜索

14、引擎可以在你的桌面查看個性化新聞、圖片及其他內容,在你所有的計算機范圍內搜索文件,直接通過補充工具欄與你的朋友共享信息,查找你的電子郵件、文件、照片、Web 歷史記錄、Email 及其他內容。本文簡介本文首先簡單介紹了基于因特網的搜索引擎,然后著重介紹了桌面搜索引擎和全文檢索的相關知識,對基于Lucene的全文檢索引擎的架構原理方面進行詳細的說明,同時對Lucene的索引機制、系統(tǒng)結構,以及中文分詞都進行了仔細分析。然后介紹了本文實現(xiàn)的一個基于Lucene的桌面搜索引擎。本桌面搜索引擎一個輕量級的全文檢索軟件,能夠幫助用戶方便地在越來越大硬盤里,從海量的資料中查找自己感興趣的文檔。從指定的文件

15、路徑中按照目錄層次進行解析、搜索,并把搜索到的每條信息進行索引后加入索引文件,然后通過Web服務器接受客戶端請求后從索引文件中搜索出所匹配的信息。1. 桌面搜索引擎與全文檢索1.1 搜索引擎的概念及發(fā)展搜索引擎的概念對于網民來說,幾乎每天都要用到它,也正是它,締造了今天的Google、百度、雅虎,說道這里你可能已經知道它指的就是搜索引擎。習慣上,人們認為網絡搜索引擎是進行查詢網站或網頁信息的站點或工具,這是一種狹義的定義。廣義地說,搜索引擎是指在互聯(lián)網上或通過互聯(lián)網能夠響應用戶提交的搜索請求,返回相應查詢結果的信息技術和系統(tǒng),這里所說的信息可以是任意的信息,如網站信息、商品信息等等。搜索引擎的

16、發(fā)展搜索引擎是能夠從互聯(lián)網上收集信息,并為用戶提供查詢服務的軟件系統(tǒng)。搜索引擎對原始文檔進行著一系列的整理和處理。用戶的查詢結果是搜索引擎按照某種規(guī)則計算獲得的。搜索引擎為用戶提供了資源查找和導航的有效手段。搜索引擎的雛形階段:最早是在1990年,出現(xiàn)了互聯(lián)網信息檢索工具Archie系統(tǒng),這個系統(tǒng)搜集的信息資源不是網頁,但原理和現(xiàn)在的搜索引擎原理一致,具備信息資源自動搜集、信息處理和索引、提供資源檢索服務功能。Archie是公認的現(xiàn)代意義上的搜索引擎的祖先。第一代搜索引擎:互聯(lián)網上的第一代搜索引擎創(chuàng)造了一段全新的互聯(lián)網歷史。這個階段的搜索引擎以Alavista、YAHOO、和Infoseek為

17、代表,主要靠人工目錄分類。由于人工分類很難處理海量信息,搜索結果的好壞往往用反饋結果的數(shù)量來衡量。所后的幾年內相繼出現(xiàn)了Lycos、AltaVista、等系統(tǒng)。這些系統(tǒng)各有特點,成為當時重要的搜索導航工具。有的還提供了網絡蜘蛛功能,真正實現(xiàn)了索引內容的動態(tài)更新,收錄的數(shù)量也快速增加。第二代搜索引擎:互聯(lián)網的第二代搜索引擎也伴隨著互聯(lián)網內容的指數(shù)增長而出現(xiàn)。第一代由于技術的限制,很難覆蓋互聯(lián)網的大部分網站。鏈接分析技術的引入,真正提高了自動搜索引擎的結果質量。第二代搜索引擎以自動抓取和自動排序檢索為特征。這個階段最成功的產品之一就是Google。Google占據大量的用戶和市場份額。第三代搜索引

18、擎:互聯(lián)網上的第三代搜索引擎正在發(fā)展形成當中,第三代搜索引擎具有的特征正在探討當中。個性化、分類劃、智能化是比較認同的特征。如果我們相信互聯(lián)網會有百年,如果我們相信互聯(lián)網會長存,我們就應該看見只有十幾年歷史的搜索引擎就像個幼稚孩子,一定會有巨大的令人震驚的改變。隨著互聯(lián)網規(guī)模的急劇膨脹,一家搜索引擎光靠自己單打獨斗已無法適應目前的市場狀況,因此現(xiàn)在搜索引擎之間開始出現(xiàn)了分工協(xié)作,并有了專業(yè)的搜索引擎技術和搜索數(shù)據庫服務提供商。從這個意義上說,它們是搜索引擎的搜索引擎。1.2 桌面搜索引擎簡介1.2.1 Windows自帶搜索功能的不足使用windows操作系統(tǒng)的朋友們經常會用到windows操

19、作系統(tǒng)自帶的搜索功能來查找自己想要的文件,但所有的使用者或多或少都會有這樣的困惑,有時候會忘了自己的文件放到哪個文件夾下,因而只能全盤查找,而查找的速度足以讓你在等待結果的期間再美美的睡上一覺。下面將介紹一下windows自帶搜索的不足首先是搜索速度的問題,由于Windows自帶的搜索功能的原理采用的是字符串匹配,所以當你對一個幾十G的硬盤進行查找那將是一件耗時的事情。其次你不能建立自己的用戶查找偏好, 你的查找總是按照操作系統(tǒng)指定的路徑查找,當你忘了自己的文件放在那里時,那將是更可怕的事,你恐怕要進行全盤查找。再次例搜索所支持文檔格式不能完全滿足用戶的需要,如果你想隨心所欲的查找你想要的文件

20、格式,恐怕你要另尋出路了。1.2.2 我們需要一款桌面搜索引擎盡管Windows自帶的搜索很不方便,但依然有大量的用戶存在,原因是桌面搜索是我們經常要做的一件事。為了能夠克服Windows自帶搜索的不足,我們迫切需要一款全新的桌面搜索引擎。桌面搜索是2004年搜索引擎領域的熱門詞匯之一,已經成為主要搜索引擎新的競爭領域。2004年10月份,主流搜索引擎Google率先推出桌面搜索工具,緊接著MSN也推出了同類產品,雅虎則在2005年1月11日發(fā)布了自己的桌面搜索工具。其實,早在2004年3月份Lycos/Hotbot發(fā)布了一款桌面搜索工具-HotBot Desktop,但由于其影響力有限,直到

21、G桌面搜索的特點在于將搜索方位延伸到自己電腦硬盤中所存儲的各種文檔,例如雅虎的桌面搜索引擎所支持文檔格式包括的Email、Word、Excel、PowerPoint、PDF等等多達200多種格式的文本、音樂、圖片和網頁。該軟件允許用戶根據自己的風格控制搜索習慣,并且在用戶的隱私方面也有獨到的保護措施。盡管目前在技術和應用方面還存在一定的問題,但桌面搜索已經成為一個被普遍看好的熱門市場,因為服務商相信桌面搜索比傳統(tǒng)的基于瀏覽器的搜索引擎有助于增加消費者的忠誠度,并為發(fā)布個性化廣告奠定基礎在這方面,可能有點類似于即使信息的廣告形式,這也是各種網絡服務工具相互影響、相互吸收優(yōu)點的發(fā)展所致。1.2.3

22、 桌面搜索引擎現(xiàn)狀Google桌面搜索Google桌面搜索引擎讓人第一感覺就是小,僅有出頭。簡潔的界面與Google的網頁搜索一脈相承,體現(xiàn)了“簡單即美”的概念。Google 桌面搜索需要運行于瀏覽器中,你可以通過雙擊Windows工具欄中的小圖標來快速調用它,它的界面中同時提供了“搜索桌面”和“搜索所有網站”兩個按鈕。特點:它可以在你的桌面查看個性化新聞、圖片及其他內容,在你所有的計算機范圍內搜索文件,直接通過補充工具欄與你的朋友共享信息,查找你的電子郵件、文件、照片、Web 歷史記錄、Email 及其他內容。百度硬盤搜索百度硬盤搜索與百度在線搜索的界面非常相似,只是增加了“硬盤”選項,在關

23、鍵字輸入框的下方,可以看到本地資料搜索的類別分別是:所有、郵件、文檔、網頁、影音、圖片、聊天、其他等類。對于郵件,它支持 郵件,文檔則支持、等格式。特點:百度硬盤搜索是一款搜索硬盤資料的軟件,全面支持中文分詞,能夠快速、準確地幫助用戶從個人電腦中查找到想要的信息,包括文件、電子郵件以及網頁瀏覽歷史等。更為重要的是,百度硬盤搜索為用戶提供了密碼保護功能。雅虎桌面搜索精靈同一樣,雅虎桌面搜索精靈也是一款小巧的搜索工具軟件。對于搜到的結果,它在窗口右邊專門提供了一個預覽區(qū),可以迅速顯示所選中文件的內容,讓你判斷該文件是否就是想要找的文件。而且它在預覽窗格的上方提供了打開文件、郵件發(fā)送、打印、刪除等快

24、捷按鈕,相當醒目易用。特點:你可以在任何應用程序中選中文字,然后將鼠標移動到桌面搜索精靈上進行搜索,或者直接按下桌面搜索精靈的熱鍵進行搜索;也不用事先打開任何瀏覽器,不用將選中的文字復制出來再粘貼過去;速度快,體積小也是其最大的特點。1.3 全文檢索1.3.1 什么是全文檢索與全文檢索系統(tǒng) 全文檢索是指計算機索引程序通過掃描文章中的每一個詞,對每一個詞建立一個索引,指明該詞在文章中出現(xiàn)的次數(shù)和位置,當用戶查詢時,檢索程序就根據事先建立的索引進行查找,并將查找的結果反饋給用戶的檢索方式。這個過程類似于通過字典中的檢索字表查字的過程。全文檢索的方法主要分為按字檢索和按詞檢索兩種。按字檢索

25、是指對于文章中的每一個字都建立索引,檢索時將詞分解為字的組合。對于各種不同的語言而言,字有不同的含義,比如英文中字與詞實際上是合一的,而中文中字與詞有很大分別。按詞檢索指對文章中的詞,即語義單位建立索引,檢索時按詞檢索,并且可以處理同義項等。英文等西方文字由于按照空白切分詞,因此實現(xiàn)上與按字處理類似,添加同義處理也很容易。中文等東方文字則需要切分字詞,以達到按詞索引的目的,關于這方面的問題,是當前全文檢索技術尤其是中文全文檢索技術中的難點,在此不做詳述。全文檢索系統(tǒng)是按照全文檢索理論建立起來的用于提供全文檢索服務的軟件系統(tǒng)。一般來說,全文檢索需要具備建立索引和提供查詢的基本功能,此外現(xiàn)代的全文

26、檢索系統(tǒng)還需要具有方便的用戶接口、面向WWW1的開發(fā)接口、二次應用開發(fā)接口等等。功能上,全文檢索系統(tǒng)核心具有建立索引、處理查詢返回結果集、增加索引、優(yōu)化索引結構等等功能,外圍則由各種不同應用具有的功能組成。結構上,全文檢索系統(tǒng)核心具有索引引擎、查詢引擎、文本分析引擎、對外接口等等,加上各種外圍應用系統(tǒng)等等共同構成了全文檢索系統(tǒng)。圖展示了上述全文檢索系統(tǒng)的結構與功能。在上圖中,我們看到:全文檢索系統(tǒng)中最為關鍵的部分是全文檢索引擎,各種應用程序都需要建立在這個引擎之上。一個全文檢索應用的優(yōu)異程度,根本上由全文檢索引擎來決定。因此提升全文檢索引擎的效率即是我們提升全文檢索應用的根本。另一個方面,一個

27、優(yōu)異的全文檢索引擎,在做到效率優(yōu)化的同時,還需要具有開放的體系結構,以方便程序員對整個系統(tǒng)進行優(yōu)化改造,或者是添加原有系統(tǒng)沒有的功能。比如在當今多語言處理的環(huán)境下,有時需要給全文檢索系統(tǒng)添加處理某種語言或者文本格式的功能,比如在英文系統(tǒng)中添加中文處理功能,在純文本系統(tǒng)中添加XML2或者HTML3格式的文本處理功能,系統(tǒng)的開放性和擴充性就十分的重要。1.3.2 全文檢索原理全文檢索是對大數(shù)據文本進行索引,在建立的索引中對要查找的單詞進行進行搜索,定位哪些文本數(shù)據包括要搜索的單詞。因此,全文檢索的全部工作就是建立索引和在索引中搜索定位,所有的工作都是圍繞這兩個來進行的。下面就逐個介紹建立全文索引中

28、有兩項非常重要,一個是如何對文本進行分詞,一是建立索引的數(shù)據結構。分詞的方法基本上是二元分詞法、最大匹配法和統(tǒng)計方法。索引的數(shù)據結構基本上采用倒排索引的結構。分詞的好壞關系到查詢的準確程度和生成的索引的大小。在中文分詞發(fā)展中,早期經常使用分詞方式是二元分詞法,該方法的基本原理是將包含中文的句子進行二元分割,不考慮單詞含義,只對二元單詞進行索引。因此該方法所分出的單詞數(shù)量較多,從而產生的索引數(shù)量巨大,查詢中會將無用的數(shù)據檢索出來,好處是算法簡單不會漏掉檢索的數(shù)據。之后又發(fā)展出最大匹配分詞方法,該方法又分為正向最大分詞和逆向最大分詞。其原理和查字典類似,對常用單詞生成一個詞典,分析句子的過程中最大

29、的匹配字典中的單詞,從而將句子拆分為有意義的單詞鏈。最大匹配法中正向分詞方法對偏正式詞語的分辨容易產生錯誤,比如“首飾和服裝”會將“和服”作為單詞分出。達夢數(shù)據庫采用的是改進的逆向最大分詞方法,該分詞方法較正向正確率有所提高。最為復雜的是通過統(tǒng)計方式進行分詞的方法。該方法采用隱式馬爾科夫鏈,也就是后一個單詞出現(xiàn)的概率依靠于前一個單詞出現(xiàn)的概率,最后統(tǒng)計所有單詞出現(xiàn)的概率的最大為分詞的依據。這個方法對新名詞和地名的識別要遠遠高于最大匹配法,準確度隨著取樣文本的數(shù)量的增大而提高。二元分詞方法和統(tǒng)計方法是不依賴于詞典的,而最大匹配法分詞方法是依賴于詞典的,詞典的內容決定分詞結構的好壞。全文檢索的索引

30、被稱為倒排索引,之所以成為倒排索引,是因為將每一個單詞作為索引項,根據該索引項查找包含該單詞的文本。因此,索引都是單詞和唯一記錄文本的標示是一對多的關系。將索引單詞排序,根據排序后的單詞定位包含該單詞的文本。逆向分詞的過程說明步驟1)讀取一整條句子到變量str中,轉到步驟2步驟2)從句子的尾端讀取1個字到變量word中,轉到步驟3步驟3)在字典查找word中保存的單詞。如果存在則保存word,轉到步驟4,否則轉到步驟5)步驟4)如果是字典中最大單詞或者超過最大單詞數(shù)(認定為新詞),從句尾去掉該單詞,返回步驟2步驟5)讀取前一個字到word中,構成新單詞,轉到步驟3)詞庫的內存數(shù)據結構和詞庫中單

31、詞的匹配算法內存中單詞采用層次結構保存假設字典中有如下的單詞中國、中華民國、國家、人民、民主在內存中按照如下方式按層排列,其中每一個方塊代表一個字,箭頭所指向為該單的前一個字單詞按照如下方式匹配比如查找單詞“中華民國”,首先在第一層中使用二分法找到“國”字,獲得“國”下層的數(shù)組“中民”,在該層使用二分法查找“民”,獲得“民”下層的數(shù)組“華”,在該層使用二分法查找“華”,獲得“華”下層的數(shù)組“中”,最后在該層找到中,至此,但此匹配完畢。索引的格式索引的格式是倒排索引的格式,也就是一個單詞對應若干個文本表示。,在達夢數(shù)據庫中,建立全文索引的對象是rec中的字段,生成倒排索引使用數(shù)據庫中的b樹進行存

32、儲。在數(shù)據庫是對某個字符字段進行全文索引,因此,rec的rowid作為該rec上該field的標示是必須要被記錄的。因此倒排索引存儲的格式如下。全文索引的查詢 全文的索引查詢首先將對要查詢的單詞進行分詞,然后在存儲倒排索引的b樹中將包含這些單詞的rowid全部查找出來,并根據這些rowid在存儲實際數(shù)據的b樹中,將包含這些數(shù)據的行過濾出來。處理流程按照如下描述:1.3.3 全文檢索的倒排索引原理為什么我們要說倒排索引呢? 因為倒排索引是目前搜索引擎公司最對搜索引擎最常用的存儲方式,也是搜索引擎的核心內容!在搜索引擎實際的引用之中,有時需要按照關鍵字的某些值查找記錄,所以我們是按照關鍵

33、字建立索引,這個索引我們就稱之為:倒排索引,而帶有倒排索引的文件我們又稱作:倒排索引文件 也可以叫它為:倒排文件,來實現(xiàn)快速的檢索與高速的效率!什么是倒排表呢?倒排文件中的 次關鍵字索引 我們稱做: 倒排表其主要優(yōu)點是: 在處理復雜的多關鍵字查詢時,可在倒排表中先完成查詢的交、并等邏輯運算,得到結果后再對記錄進行存取。這樣不必對每個記錄隨機存取,把對記錄的查詢轉換為地址集合的運算,從而提高查找速度!下面就是整個倒排表的建立過程(組圖):2.索引表怎樣建立倒排索引呢?關于建立倒排索引其實就象我們寫一本小說一樣,目錄是章節(jié)標題對應的頁碼 對全文搜索來講,倒排索引就是詞對應文檔編號!下面我們舉個例子

34、: 案例1:普通文檔存在形式:PPT(從頭到尾)=> keywords1, keywords2, keywords3, keywords4,keywords5案例2:倒排索引翻轉后的結果顯示:keywords1, keywords2, keywords3, keywords4,keywords5 (直接找關鍵字 然后在找內容頁)=> PPT再簡單點講:我們隨便看什么書,我想因該是分2種看法,一種是從頭到尾法! 而另一種就 先看目錄看那些是我需要看的那么直接就翻到該頁面!不然和第一個人一樣從頭一直看 ,看到你想要看的,那不是前面時間都浪費了?目錄就起了個關鍵作用!2. 開放源代碼的全

35、文檢索引擎架構Lucene2.1 Lucene簡介2.1.1 什么是LuceneLucene是apache軟件基金會jakarta項目組的一個子項目,是一個開放源代碼的全文檢索引擎工具包,即它不是一個完整的全文檢索引擎,而是一個全文檢索引擎的架構,提供了完整的查詢引擎和索引引擎,部分文本分析引擎(英文與德文兩種西方語言)。Lucene的目的是為軟件開發(fā)人員提供一個簡單易用的工具包,以方便的在目標系統(tǒng)中實現(xiàn)全文檢索的功能,或者是以此為基礎建立起完整的全文檢索引擎。 Lucene的原作者是Doug Cutting,他是一位資深全文索引/檢索專家,曾經是V-Twin搜索引擎的主要開發(fā)者,后在Exci

36、te擔任高級系統(tǒng)架構設計師,目前從事于一些Internet底層架構的研究。早先發(fā)布在作者自己的,后來發(fā)布在SourceForge,2001年年底成為apache軟件基金會jakarta的一個子項目:/lucene/。2.1.2 Lucene的應用、特點及優(yōu)勢作為一個開放源代碼項目,Lucene從問世之后,引發(fā)了開放源代碼社群的巨大反響,程序員們不僅使用它構建具體的全文檢索應用,而且將之集成到各種系統(tǒng)軟件中去,以及構建Web應用,甚至某些商業(yè)軟件也采用了Lucene作為其內部全文檢索子系統(tǒng)的核心。apache軟件基金會的網站使用了Lucene作為全

37、文檢索的引擎,IBM的開源軟件eclipse9的版本中也采用了Lucene作為幫助子系統(tǒng)的全文索引引擎,相應的IBM的商業(yè)軟件Web Sphere10中也采用了Lucene。Lucene以其開放源代碼的特性、優(yōu)異的索引結構、良好的系統(tǒng)架構獲得了越來越多的應用。 Lucene作為一個全文檢索引擎,其具有如下突出的優(yōu)點:(1)索引文件格式獨立于應用平臺。Lucene定義了一套以8位字節(jié)為基礎的索引文件格式,使得兼容系統(tǒng)或者不同平臺的應用能夠共享建立的索引文件。(2)在傳統(tǒng)全文檢索引擎的倒排索引的基礎上,實現(xiàn)了分塊索引,能夠針對新的文件建立小文件索引,提升索引速度。然后通過與原有索引的合并

38、,達到優(yōu)化的目的。(3)優(yōu)秀的面向對象的系統(tǒng)架構,使得對于Lucene擴展的學習難度降低,方便擴充新 功能。 (4)設計了獨立于語言和文件格式的文本分析接口,索引器通過接受Token流完成索引文件的創(chuàng)立,用戶擴展新的語言和文件格式,只需要實現(xiàn)文本分析的接口。(5)已經默認實現(xiàn)了一套強大的查詢引擎,用戶無需自己編寫代碼即使系統(tǒng)可獲得強大的查詢能力,Lucene的查詢實現(xiàn)中默認實現(xiàn)了布爾操作、模糊查詢(Fuzzy Search)、分組查詢等等。     面對已經存在的商業(yè)全文檢索引擎,Lucene也具有相當?shù)膬?yōu)勢。首先,它的開發(fā)源代碼發(fā)行方式(遵守Apach

39、e Software License12),在此基礎上程序員不僅僅可以充分的利用Lucene所提供的強大功能,而且可以深入細致的學習到全文檢索引擎制作技術和面相對象編程的實踐,進而在此基礎上根據應用的實際情況編寫出更好的更適合當前應用的全文檢索引擎。在這一點上,商業(yè)軟件的靈活性遠遠不及Lucene。其次,Lucene秉承了開放源代碼一貫的架構優(yōu)良的優(yōu)勢,設計了一個合理而極具擴充能力的面向對象架構,程序員可以在Lucene的基礎上擴充各種功能,比如擴充中文處理能力,從文本擴充到HTML、PDF13等等文本格式的處理,編寫這些擴展的功能不僅僅不復雜,而且由于Lucene恰當合理的對系統(tǒng)設備做了程序

40、上的抽象,擴展的功能也能輕易的達到跨平臺的能力。最后,轉移到apache軟件基金會后,借助于apache軟件基金會的網絡平臺,程序員可以方便的和開發(fā)者、其它程序員交流,促成資源的共享,甚至直接獲得已經編寫完備的擴充功能。最后,雖然Lucene使用Java語言寫成,但是開放源代碼社區(qū)的程序員正在不懈的將之使用各種傳統(tǒng)語言實現(xiàn)(例如.net framework14),在遵守Lucene索引文件格式的基礎上,使得Lucene能夠運行在各種各樣的平臺上,系統(tǒng)管理員可以根據當前的平臺適合的語言來合理的選擇。2.2 Lucene系統(tǒng)結構分析Lucene作為一個優(yōu)秀的全文檢索引擎,其系統(tǒng)結構具有強烈的面向對

41、象特征。首先是定義了一個與平臺無關的索引文件格式,其次通過抽象將系統(tǒng)的核心組成部分設計為抽象類,具體的平臺實現(xiàn)部分設計為抽象類的實現(xiàn),此外與具體平臺相關的部分比如文件存儲也封裝為類,經過層層的面向對象式的處理,最終達成了一個低耦合高效率,容易二次開發(fā)的檢索引擎系統(tǒng)。以下將討論Lucene系統(tǒng)的結構組織,并給出系統(tǒng)結構與源碼組織圖:     從圖中我們清楚的看到,Lucene的系統(tǒng)由基礎結構封裝、索引核心、對外接口三大部分組成。其中直接操作索引文件的索引核心又是系統(tǒng)的重點。Lucene的將所有源碼分為了7個模塊(在java語言中以包即package來表示)

42、,各個模塊所屬的系統(tǒng)部分也如上圖所示。需要說明的是是做為的語法解析器存在,不被系統(tǒng)之外實際調用,因此這里沒有當作對外接口看待,而是將之獨立出來。     從面象對象的觀點來考察,Lucene應用了最基本的一條程序設計準則:引入額外的抽象層以降低耦合性。首先,引入對索引文件的操作的封裝,然后將索引部分的實現(xiàn)建立在()其之上,完成對索引核心的抽象。在索引核心的基礎上開始設計對外的接口與。在每一個局部細節(jié)上,比如某些常用的數(shù)據結構與算法上,Lucene也充分的應用了這一條準則。在高度的面向對象理論的支撐下,使得Lucene的實現(xiàn)容易理解,易于擴展。Lucene

43、在系統(tǒng)結構上的另一個特點表現(xiàn)為其引入了傳統(tǒng)的客戶端服務器結構以外的的應用結構。Lucene可以作為一個運行庫被包含進入應用本身中去,而不是做為一個單獨的索引服務器存在。這自然和Lucene開放源代碼的特征分不開,但是也體現(xiàn)了Lucene在編寫上的本來意圖:提供一個全文索引引擎的架構,而不是實現(xiàn)。Lucene的API接口設計的比較通用,輸入輸出結構都很像數(shù)據庫的表=>記錄=>字段,所以很多傳統(tǒng)的應用的文件、數(shù)據庫等都可以 比較方便的映射到Lucene的存儲結構/接口中。總體上看:可以先把Lucene當成一個支持全文索引的數(shù)據庫系統(tǒng)。比較一下Lucene和數(shù)據庫:全文檢索 like &

44、quot;%keyword%" 由于數(shù)據庫索引不是為全文索引設計的,因此,使用like "%keyword%"時,數(shù)據庫索引是不起作用的,在使用like查詢時,搜索過程又變成類似于一頁頁翻書的遍歷過程了,所以對于含有模糊查詢的數(shù)據庫 服務來說,LIKE對性能的危害是極大的。如果是需要對多個關鍵詞進行模糊匹配:like"%keyword1%" and like "%keyword2%" .其效率也就可想而知了。通常比較厚的書籍后面常常附關鍵詞索引表(比如:北京:12, 34頁,上海:3,77頁),它能夠幫助讀者比較快地找到相關

45、內容的頁碼。而數(shù)據庫索引能夠大大提高查詢的速度原理也是一樣,想像一下通過書后面的索 引查找的速度要比一頁一頁地翻內容高多少倍而索引之所以效率高,另外一個原因是它是排好序的。對于檢索系統(tǒng)來說核心是一個排序問題。 所以建立一個高效檢索系統(tǒng)的關鍵是建立一個類似于科技索引一樣的反向索引機制,將數(shù)據源(比如多篇文章)排序順序存儲的同時,有另外一個排好序的關鍵詞 列表,用于存儲關鍵詞=>文章映射關系,利用這樣的映射關系索引:關鍵詞=>出現(xiàn)關鍵詞的文章編號,出現(xiàn)次數(shù)(甚至包括位置:起始偏移 量,結束偏移量),出現(xiàn)頻率,檢索過程就是把模糊查詢變成多個可以利用索引的精確查詢的邏輯組合的過程。從而大大

46、提高了多關鍵詞查詢的效率,所以,全文 檢索問題歸結到最后是一個排序問題。由此可以看出模糊查詢相對數(shù)據庫的精確查詢是一個非常不確定的問題,這也是大部分數(shù)據庫對全文檢索支持有限的原因。Lucene最核心的特征是通過特殊的索引結構實現(xiàn)了傳統(tǒng)數(shù)據庫不擅長的全文索引機制,并提供了擴展接口,以方便針對不同應用的定制。2.3 深入Lucene 索引機制Lucene是一個高性能的java全文檢索工具包,它使用的是倒排文件索引結構。該結構及相應的生成算法如下:一、設有兩篇文章1和2文章1的內容為:Tom lives in Guangzhou,I live in Guangzhou too.文章2的內容為:He

47、once lived in Shanghai.二、由于lucene是基于關鍵詞索引和查詢的,首先我們要取得這兩篇文章的關鍵詞,通常我們需要如下處理措施1、我們現(xiàn)在有的是文章內容,即一個字符串,我們先要找出字符串中的所有單詞,即分詞。英文單詞由于用空格分隔,比較好處理。中文單詞間是連在一起的需要特殊的分詞處理。2、文章中的”in”, “once”“too”等詞沒有什么實際意義,中文中的“的”“是”等字通常也無具體含義,這些不代表概念的詞可以過濾掉3.、用戶通常希望查“He”時能把含“he”,“HE”的文章也找出來,所以所有單詞需要統(tǒng)一大小寫。4、 用戶通常希望查“l(fā)ive”時能把含“l(fā)ives”

48、,“l(fā)ived”的文章也找出來,所以需要把“l(fā)ives”,“l(fā)ived”還原成“l(fā)ive”5、文章中的標點符號通常不表示某種概念,也可以過濾掉,在lucene中以上措施由Analyzer類完成,經過上面處理后 文章1的所有關鍵詞為:tom live guangzhou live guangzhou 文章2的所有關鍵詞為:he live shanghai三、 有了關鍵詞后,我們就可以建立倒排索引了。上面的對應關系是:“文章號”對“文章中所有關鍵詞”。倒排索引把這個關系倒過來,變成:“關鍵詞”對“擁有該關鍵詞的所有文章號”。文章1,2經過倒排后變成關鍵詞文章號guangzhou 1he 2i1li

49、ve 2shanghai 2tom tom 1通常僅知道關鍵詞在哪些文章中出現(xiàn)還不夠,我們還需要知道關鍵詞在文章中出現(xiàn)次數(shù)和出現(xiàn)的位置,通常有兩種位置:a)字符位置,即記錄該詞是文章中第幾個字符(優(yōu)點是關鍵詞亮顯時定位快);b)關鍵詞位置,即記錄該詞是文章中第幾個關鍵詞(優(yōu)點是節(jié)約索引空間、詞組(phase)查詢快),lucene 中記錄的就是這種位置。加上“出現(xiàn)頻率”和“出現(xiàn)位置”信息后,我們的索引結構變?yōu)椋宏P鍵詞文章號出現(xiàn)位置guangzhou 123,6he 211i114live 12,212,5,2shanghai 213tom 11 1以live 這行為例我們說明一下該結構:liv

50、e在文章1中出現(xiàn)了2次,文章2中出現(xiàn)了一次,它的出現(xiàn)位置為“2,5,2”這表示什么呢?我們需要結合文章號和出現(xiàn)頻率來分析,文章1中出現(xiàn)了2次,那么“2,5”就表示live在文章1中出現(xiàn)的兩個位置,文章2中出現(xiàn)了一次,剩下的“2”就表示live是文章2中第 2個關鍵字。以上就是lucene索引結構中最核心的部分。我們注意到關鍵字是按字符順序排列的(lucene沒有使用B樹結構),因此lucene可以用二元搜索算法快速定位關鍵詞。實現(xiàn)時 lucene將上面三列分別作為詞典文件(Term Dictionary)、頻率文件(frequencies)、位置文件 (positions)保存。其中詞典文件不

51、僅保存有每個關鍵詞,還保留了指向頻率文件和位置文件的指針,通過指針可以找到該關鍵字的頻率信息和位置信息。Lucene中使用了field的概念,用于表達信息所在位置(如標題中,文章中,url中),在建索引中,該field信息也記錄在詞典文件中,每個關鍵詞都有一個field信息(因為每個關鍵字一定屬于一個或多個field)。為了減小索引文件的大小,Lucene對索引還使用了壓縮技術。首先,對詞典文件中的關鍵詞進行了壓縮,關鍵詞壓縮為<堉?綴長度,后綴>,例如:當前詞為“阿拉伯語”,上一個詞為“阿拉伯”,那么“阿拉伯語”壓縮為<3,語>。其次大量用到的是對數(shù)字的壓縮,數(shù)字只保

52、存與上一個值的差值(這樣可以減小數(shù)字的長度,進而減少保存該數(shù)字需要的字節(jié)數(shù))。例如當前文章號是16389(不壓縮要用3個字節(jié)保存),上一文章號是16382,壓縮后保存7(只用一個字節(jié))。下面我們可以通過對該索引的查詢來解釋一下為什么要建立索引。假設要查詢單詞 “l(fā)ive”,lucene先對詞典二元查找、找到該詞,通過指向頻率文件的指針讀出所有文章號,然后返回結果。詞典通常非常小,因而,整個過程的時間是毫秒級的。2.4 Lucene文檔分析與中文分詞2.4.1 Lucene分析器原理Lucene分析器全由Analyzer派生而來。Analyzer類構建用于分析文本的TokenStream對象,因

53、此(thus)它表示(represent)用于從文本中分解(extract)出組成索引的terms的一個規(guī)則器(policy)。典型的(typical)實現(xiàn)首先創(chuàng)建一個Tokenizer,它將那些從Reader對象中讀取字符流(stream of characters)打碎為(break into)原始的Tokens(raw Tokens)。然后一個或更多的TokenFilters可以應用在這個Tokenizer的輸出上。警告:你必須在你的子類(subclass)中覆寫(override)定義在這個類中的其中一個方法,否則的話Analyzer將會進入一個無限循環(huán)(infinite loop)中

54、。     StandardAnalyzer類是使用一個English的stop words列表來進行tokenize分解出文本中word,使用StandardTokenizer類分解詞,再加上StandardFilter以及LowerCaseFilter以及StopFilter這些過濾器進行處理的這樣一個Analyzer類的實現(xiàn)。  2.4.2 中文分詞什么是中文分詞眾所周知,英文是以詞為單位的,詞和詞之間是靠空格隔開,而中文是以字為單位,句子中所有的字連起來才能描述一個意思。例如,英文句子I am a student,用

55、中文則為:“我是一個學生”。計算機可以很簡單通過空格知道student是一個單詞,但是不能很容易明白“學”、“生”兩個字合起來才表示一個詞。把中文的漢字序列切分成有意義的詞,就是中文分詞,有些人也稱為切詞。我是一個學生,分詞的結果是:我 是 一個 學生。 中文分詞技術現(xiàn)有的分詞技術可分為三類:基于字符串匹配的分詞 基于理解的分詞 基于統(tǒng)計的分詞 這篇文章中使用的是基于字符串匹配的分詞技術,這種技術也被稱為機械分詞。它是按照一定的策略將待分析的漢字串與一個“充分大的”詞庫中的詞條進行匹配。若在詞庫中找到某個字符串則匹配成功(識別出一個詞)。按照掃描方向的不同,串匹配分詞方法可以分為正向匹配和逆向匹配;按照不同長度優(yōu)先匹配的情況,可以分為最大(最長)匹配和最小(最短)匹配;按照是否與詞性標注過程相結合,又可以分為單純分詞法和分詞與標注結合法。常用的幾種機械分詞方法如下:正向最大匹配法(由左到右的方向) 逆向最大匹配法(由右到左的方向) 分詞器實現(xiàn)這個實現(xiàn)了機械分詞中正向最大匹配法的Lucene分詞器包括兩個類,CJKAnalyzer和CJKTokenizer,他們的源代碼如下:package org.solol.analysi

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論