【正文】
er、 Filter、ThreadMonitor、 Fetcher Searcher、 Query、 Hits IndexSearcher、 IndexWriter Analyzer、 Token QueryParser Document、 Field XMLDocumentHandlerDOM、 XMLDocumentHandlerSAX FSDirectory、 AMDirectory、StoragePipeline BitVector、 PriorityQueue 全文檢索 的 API接口設(shè)計的比較通用,輸入輸出結(jié)構(gòu)都很像數(shù)據(jù)庫的表 ==記錄 ==字段, 所以我們可以用一個標(biāo)準(zhǔn)的中間格式 XML作為數(shù)據(jù)導(dǎo)入接口,然后其他數(shù)據(jù)源,只要是能夠映射成表 ==記錄 ==字段這樣層次結(jié)構(gòu)的 (比如 PDF),只需要通過解析器轉(zhuǎn)換成標(biāo)準(zhǔn)的中間格式就可以進(jìn)行數(shù)據(jù)索引了。 對搜索結(jié)果進(jìn)行處理排序 所有相關(guān)網(wǎng)頁針對該關(guān)鍵詞的相關(guān)信息在索引庫中都有記錄,“ 網(wǎng)頁評級 ”把查詢請求和鏈接信息結(jié)合起來對搜索結(jié)果進(jìn)行相關(guān)度的評價,通過“ 查詢服務(wù)器 ”按照相關(guān)度進(jìn)行排序 (相關(guān)度越高,排名越靠前 ),并提取關(guān)鍵詞的內(nèi)容摘要,組織最后的頁面返回給“用戶”。 在索引數(shù)據(jù)庫中搜索 “ 用戶 ”通過提交查詢請求給“ 查詢服務(wù)器 ”, “ 查詢服務(wù)器 ”分解搜索請求,在“ 索引數(shù)據(jù)庫 ”中進(jìn)行相關(guān)網(wǎng)頁的查找,對于單個詞匯的查詢來說,只要從詞匯表中找到對應(yīng)的單詞就可以找到指向該單詞的出現(xiàn)情況列表;對于查詢串由多個單詞組成(這種情況在查詢過程中比較常見)相對于單詞匯查詢要復(fù)雜得多,首先獲取查詢串中每個詞匯的出現(xiàn)情況列表,然后遍歷所有這些獲取的列表,看看查詢串中的詞匯是否在文本中順序出現(xiàn)(對于短語)或者比較靠近(近似查詢)。這樣第二個文件由于比較小而可以在搜索的時候放在內(nèi)存中。索引被分成兩個文件存放。 一個在大小為 n 個字符的文件上進(jìn)行的倒排索引可以在 ??nO 時間內(nèi)構(gòu)造成功。倒排文件結(jié)構(gòu)由詞匯和出現(xiàn)情況兩部分組成。倒排文件在當(dāng)前大多數(shù)信息獲取系統(tǒng)中得到應(yīng)用,它 對于關(guān)鍵詞的搜索非常有效。關(guān)鍵詞 w 在文檔 i 中的權(quán)重定義 ]3[ 如下: ),( iwweight =??iwkkkiwwinNfnNf122 ))( lg ()()lg ( 其中, wif 為關(guān)鍵詞 w 在文檔 i 中出現(xiàn)的頻率,即詞頻; N 為信息庫中文檔的數(shù)目; wn為信息庫中包含詞條 w 的文檔的個數(shù); iW 為文檔 i 中所有關(guān)鍵詞的個數(shù)。兩種策略的區(qū)別,下圖的說明會更加明確。 在抓取網(wǎng)頁的時候,網(wǎng)絡(luò)蜘蛛一般有兩種策略:廣度優(yōu)先和深度優(yōu)先 ]2[ (本文模型采 4 用的是廣度優(yōu)先)。 三、 搜索引擎系統(tǒng)模型 下面給出基于 Inter的全文搜索引擎系統(tǒng)架構(gòu)圖,搜索引擎的各部分都會相互交錯相互依賴。搜索引擎主要由網(wǎng)絡(luò)蜘蛛( WebSpider)、索引 (Index)與搜索(Search)引擎軟件等部分組成 ]1[ 。一個查詢是由一些通過邏輯操作符號(如AND、 OR和 NOT)連接起來的關(guān)鍵詞所組成。 在構(gòu)造搜索引擎時,布爾模型是用得最普遍的模型。 二、 搜索引擎系統(tǒng)分析 搜索引擎通常指的是基于 Inter的搜索引擎,其作用是檢索 Web的內(nèi)容。 中國互聯(lián)網(wǎng)絡(luò)信息中心( CNNIC)在京發(fā)布的“第十四次中國互聯(lián)網(wǎng)絡(luò)發(fā)展?fàn)顩r統(tǒng)計報告”顯示, 搜索引擎是用戶在互聯(lián)網(wǎng)上獲取信息最主要的方式。利用互聯(lián)網(wǎng),用戶一方面可以快速、方便地接觸到各種信息,但是另一方面通過普通瀏覽的方式很難在信息的海洋中找到真正需要的信息。分析器 。 關(guān)鍵詞 : 搜索引擎 。 1 基于 Inter 的全文搜索引擎的模型設(shè)計 摘 要 根據(jù)搜索引擎與信息獲取的原理 ,設(shè)計了一個基于 Inter的全文搜索引擎 ,該模型從技術(shù)上可以適用于任何有全文搜索需求的應(yīng)用 ,并且由于基于 Java 語言設(shè)計 ,從而特別適于跨平臺應(yīng)用。該模型還采用了數(shù)據(jù)庫管理作業(yè)和多線程技術(shù) ,從而使全文搜索的性能和效率得到了進(jìn)一步的提高。網(wǎng)絡(luò)蜘蛛 。索引 中圖分類號: 文獻(xiàn)標(biāo)識碼: A 目錄 摘要?????????????????????????? 2 2 目錄 ?????????????????????????? 3 一、引言 ???????????????????????? 4 二、搜索引擎系統(tǒng)分析 ?????????????????? 4 三、搜索引擎系統(tǒng)模型 ?????????????????? 4 ????????????????? 5 ?????????????????? 5 ????????????????? 6 ??????????????? 6 四、模型的組成 結(jié)構(gòu) ??????????????????? 7 五、搜索引擎實現(xiàn)機制 ?????????????????? 9 ????????????????? 9 ????????????????? 10 索引過程 ???????????????????? 10 檢索過程中的結(jié)果顯示 ?????????????? 10 六、結(jié)論 ???????????????????????? 11 參考文獻(xiàn) ???????????????????????? 12 指導(dǎo)老師點評 ?? ???????????????????? 13 一、 引言 隨著計算機技術(shù)和互聯(lián)網(wǎng)技術(shù)的飛速發(fā)展,信息獲取已經(jīng)從手工獲取,到計算機信息獲取,以及到現(xiàn)在的通過網(wǎng)絡(luò)進(jìn)行信息獲取。要在浩如煙海的網(wǎng)絡(luò)世界尋找需要的信息,作為現(xiàn)代信息獲取技術(shù)的主要應(yīng)用 —— 搜索引擎(Search Engine)是必不可少的。又由于搜索引擎有大量的用戶,有很好的經(jīng)濟(jì)價值,所以引起了世界各國計算機 科學(xué)界和信 3 息產(chǎn)業(yè)界的高度關(guān)注,目前的研究、開發(fā)十分活躍,出現(xiàn)了很多值得注意的動向。它們收集因特網(wǎng)上上億個網(wǎng)頁,并且每一個網(wǎng)頁上的每一個詞都被搜索引擎所收錄,也就是我們所說的全文檢索。在布爾模型中,一個文檔通過一個關(guān)鍵詞條的集會來表示,這些詞條都 來自一個詞典。在查詢與文檔匹配的過程中,主要看該文檔中的詞條是否滿足查詢的條件。其 實現(xiàn)原理,可以看作四步:從互聯(lián)網(wǎng)上抓取網(wǎng)頁( Data Gathering)→建立 Web內(nèi)容索引數(shù)據(jù)庫 (Index creation)→在索引數(shù)據(jù)庫中搜索 (Search interface)→對搜索 結(jié)果進(jìn)行處理和排序 (Data display)。其處理流程按照如下描述: 圖 1 基于 Inter的全文搜索引擎系統(tǒng)架構(gòu) 從互聯(lián)網(wǎng)上抓取網(wǎng)頁 “網(wǎng)絡(luò)蜘蛛”依據(jù)一定的網(wǎng)絡(luò)協(xié)議在互聯(lián)網(wǎng)中抓取、加工、整理網(wǎng)頁,把網(wǎng)頁送入“ 網(wǎng)頁數(shù)據(jù)庫 ”,從網(wǎng)頁中“ 提取 URL”,把 URL送入“ URL數(shù)據(jù)庫 ”,“ 蜘蛛控制 ”得到網(wǎng)頁的 URL,控制“ 網(wǎng)絡(luò)蜘蛛 ”抓取其它網(wǎng)頁,反復(fù)循環(huán)直到把所有的網(wǎng) 頁抓取完成。廣度優(yōu)先是最常用的方式,因為這個方法可以讓網(wǎng)絡(luò)蜘蛛并行處理,提高其抓取速度。 圖 2 網(wǎng)絡(luò)蜘蛛抓取網(wǎng)頁的兩種策略的區(qū)別 建立索引數(shù)據(jù)庫 系統(tǒng)從“ 網(wǎng)頁數(shù)據(jù)庫 ”提取相關(guān)網(wǎng)頁信息(包括網(wǎng)頁所在 URL、編碼類型、頁面內(nèi)容包含的關(guān)鍵詞、關(guān)鍵詞位置、生成時間、大小、 與其它網(wǎng)頁的鏈接關(guān)系等),根據(jù)一定的詞條算法進(jìn)行大量復(fù)雜計算,得到每一個網(wǎng)頁針對頁面內(nèi)容中及超鏈中每一個關(guān)鍵詞的權(quán)重(或重要性),然后用這些相關(guān)信息建立“ 索引數(shù)據(jù)庫 ”。 有三種索引的基本技術(shù):倒排文件、后綴數(shù)組和簽名文件。本文模型采用倒排文件技術(shù)作為索引方法建立數(shù)據(jù)庫。對于每個單詞,都有一個列 5 表(稱為詞匯列表)來記錄單詞在所有文本中出現(xiàn)的位置,這些位置可以是單詞的位置(是文本中的第幾個單詞),也可以是字符的位置(是文本中的第幾個字符)。所以已知的單詞都放在一棵樹結(jié)構(gòu)中,在構(gòu)造倒排索引的時候,對于每個讀入的單 詞,首先在該樹中查找,如果沒有找到,就在該樹中加入一個空的詞匯出現(xiàn)情況列表;否則將該詞匯的新位置加入到樹中對應(yīng)詞匯出現(xiàn)情況列表的末尾。第一個文件順序存放詞匯出現(xiàn)情況列表,第二個文件以字典序存放樹中的詞匯,還為每個詞匯存放一個指向第一個文件中該單詞對應(yīng)的詞匯出現(xiàn)情況列表的指針。 在建“索引數(shù)據(jù)庫”同時系統(tǒng)進(jìn)行“鏈接信息提取”,把鏈接信息(包括錨文本、鏈接本身等信息)送入“鏈接數(shù)據(jù)庫”,為“網(wǎng)頁評級”提供依據(jù)。這些列表的合并和交叉運算需要花費的時 間比單詞查詢的長得多。 對于包含 個詞條的查詢向量 和一個文檔向量 來說,它們之間的相關(guān)度可以通過下面的公式 來計算: ),( dqsimilarity =? ??? ??niniiiniiidqdq1 1221)()( 四、 模型的 組成結(jié)構(gòu) 基于 Inter的全文搜索引擎 的組成結(jié)構(gòu)如下表:對于外部應(yīng)用來說網(wǎng)頁獲取模塊( spider)、索引模塊 (index)和檢索模塊 (search)是主要的外部應(yīng)用入口。 我們也可以設(shè)計基于 XML的搜索結(jié)果輸出,這樣方便了通過 XSLT進(jìn)行前臺的結(jié)果顯示。 圖 3 全文檢索的 輸入輸出結(jié)構(gòu) 7 此外在應(yīng)用的國際化支持方面 ,XML數(shù)據(jù)源用 JAVA解析后是 UNICODE,這樣無論是日文,繁體中文還是德文的內(nèi)容我們都可以在一個索引庫中同時進(jìn)行搜索。 圖 4 全文檢索對國際化的支持 表 2 全文檢索 和數(shù)據(jù)庫的比較 ]4[ 全文檢索 數(shù)據(jù)庫 索引數(shù)據(jù)源 doc(field1,field2...) \ indexer / _____________ | Shine Index| / searcher \ 結(jié)果輸出: Hits(doc(field1,field2)) Document:一個需要進(jìn)行索引的“單元” 一個 Document由多個字段組成 Field:字段 Hits:查詢結(jié)果集,由匹配的 Document組成 索引數(shù)據(jù) record(field1,field2...) \ SQL: insert/ _____________ | DB Index | / SQL: select \ 結(jié)果輸出:results(record(field1,field2..)) Record:記錄,包含多個字段 Field: 字段 RecordSet:查詢結(jié)果集,由多個 Record組成 全文檢索 ≠ like %keyword% 五、 搜索引擎實現(xiàn)機制 網(wǎng)絡(luò)蜘蛛的實現(xiàn)機制 網(wǎng)絡(luò)蜘蛛專門設(shè)計用來做基于內(nèi)容的站點查找。影響爬行速度的一個重要因素是 DNS查詢,為此每個爬行器都要維護(hù)一個自己的 DNS緩沖。這些因素綜合起來使得爬行器變成一個非常復(fù)雜的系統(tǒng)。 Message Handler (Thread)F e t c h e rF e t c h e r p o o l ( T h r e a d )FetcherThreadFetcherThreadFetcherThreadS t o r a g eS t o r eL o gU R L M e s s a g e Q u e u eT h r e a dM o n i t o r( T h r e a d )F i l t e r sU R L L e n g t h F i l t e rR o b o t E x c l u s i o n F i l t e rU R L V i s i t e d F i l t e rK n o w n P a t h s F i l t e rQ u e n eM o n i t o r sE v e r y 5S e c o n d sP u t s U R L s i n t o U R L M e s s a g e圖 5 網(wǎng) 絡(luò)蜘蛛工作模型 信息處理程式 ( Message Handler)依次將隊列 (URLMessage Queue)中的 URL信息送入過濾器鏈 (Filters), 每一個 過 濾器都能決定是否向前傳遞 URL信息 , 改變 URL信息 , 或甚至刪除 URL信息。 信息處理程式運行在自己的線程中。如果線程池中要處理的任務(wù)數(shù)多于現(xiàn)有的線程數(shù) ,則暫時不能被處理的任務(wù)被保持在一個隊列中 ,等待線程完成處理中的任務(wù)后接著去讀取他們。 網(wǎng)頁獲取過程可以看到 ? 爬行器通過異步輸入 /輸出來管理事件,通過一定數(shù)量的隊列來管理獲取網(wǎng)頁過 程中的狀態(tài)遷移。 全文檢索的實現(xiàn)機制 建立一個高效檢索系統(tǒng)的關(guān)鍵是建立一個類似于科技索引一樣的反向索引機