劉嘉
(鄭州輕工業(yè)學(xué)院軟件學(xué)院,河南鄭州450002)
搜索引擎是一種能夠通過Internet接受用戶的查詢指令,并向用戶提供符合其查詢要求的信息資源網(wǎng)址的系統(tǒng)[1].它是一些在Web中主動搜索信息(網(wǎng)頁上的單詞和特定的描述內(nèi)容)并將其自動索引的Web網(wǎng)站,其索引內(nèi)容存儲在可供檢索的大型數(shù)據(jù)庫中,并建立索引和目錄服務(wù).
本文設(shè)計(jì)了一個(gè)基于Web的小型搜索引擎.系統(tǒng)基于Linux平臺,通過C語言編程,采用模塊化的設(shè)計(jì)模式,主要實(shí)現(xiàn)了網(wǎng)頁獲取子系統(tǒng)、索引子系統(tǒng)、檢索子系統(tǒng)3大系統(tǒng),進(jìn)而實(shí)現(xiàn)對搜索引擎原理的解釋,并為解決系統(tǒng)性能提供了有關(guān)方法.
搜索系統(tǒng)由數(shù)據(jù)采集、文檔組織和索引、查詢服務(wù)3個(gè)模塊構(gòu)成.作為數(shù)據(jù)的收集處理系統(tǒng),網(wǎng)頁抓取系統(tǒng)從互聯(lián)網(wǎng)上通過某些策略獲取信息,經(jīng)過簡單分析整理后傳輸至索引系統(tǒng);索引系統(tǒng)建立可供檢索系統(tǒng)檢索的數(shù)據(jù)結(jié)構(gòu);作為與用戶交互的檢索系統(tǒng),得到檢索請求之后,把索引系統(tǒng)提供的信息整理后發(fā)送至用戶[2].簡易系統(tǒng)結(jié)構(gòu)如圖1所示.
圖1 系統(tǒng)結(jié)構(gòu)Fig.1 Diagram of the System structure
采集總調(diào)度是整個(gè)網(wǎng)頁獲取子系統(tǒng)的核心[3],其主要負(fù)責(zé):合理分配每個(gè)采集點(diǎn)的采集任務(wù);整理并發(fā)送從采集點(diǎn)發(fā)送來的采集數(shù)據(jù);進(jìn)行URL排重工作.采集點(diǎn)通過內(nèi)部任務(wù)分配算法,使其減少同一采集點(diǎn)頻繁采集相同網(wǎng)站的頻率.每個(gè)采集點(diǎn)采集到的數(shù)據(jù)匯總到總調(diào)度之后,總調(diào)度進(jìn)行分析整理,然后發(fā)送至索引系統(tǒng).
任務(wù)分配算法用來解決采集點(diǎn)頻繁采集同一網(wǎng)站不同網(wǎng)頁,造成網(wǎng)站發(fā)現(xiàn)非正常瀏覽而進(jìn)行屏蔽操作的問題[4].核心思想為:構(gòu)造一個(gè)任務(wù)隊(duì)列,將任務(wù)分類后,由總調(diào)度負(fù)責(zé)將每一類任務(wù)發(fā)送給采集點(diǎn).在采集的過程中,采集點(diǎn)采集到網(wǎng)頁原始數(shù)據(jù),經(jīng)過總調(diào)度分析后,從中取得大量URL,這些URL將會作為待采集任務(wù)放入U(xiǎn)RL庫中,但是,每個(gè)網(wǎng)頁中的URL可能會重復(fù),所以必須設(shè)計(jì)一種高效排重算法.在本系統(tǒng)中,采用的是經(jīng)典排重算法:布隆過濾器(Bloom Filter).假定數(shù)據(jù)量為N,并且出錯率控制在M以下時(shí),需要K個(gè)hash函數(shù),此K個(gè)哈希得到相應(yīng)的位并檢測是否已經(jīng)出現(xiàn)過的核心算法為:
索引系統(tǒng)獲取數(shù)據(jù)的來源有2種,一種是原始數(shù)據(jù),一種是網(wǎng)頁獲取子系統(tǒng)發(fā)送來的數(shù)據(jù).首先,系統(tǒng)會將原始數(shù)據(jù)建立檢索二叉樹,用于快速定位索引位置,然后建立原始數(shù)據(jù)的倒排索引.其次,當(dāng)從網(wǎng)頁獲取子系統(tǒng)接收到數(shù)據(jù)之后,更新二叉樹,進(jìn)行增量索引.架構(gòu)如圖2所示.
圖2 索引系統(tǒng)架構(gòu)Fig.2 Diagram of the index system architecture
用戶通過API或者網(wǎng)頁端CGI接口發(fā)送相應(yīng)請求.檢索系統(tǒng)接到請求后進(jìn)行解析,判斷屬于檢索請求還是權(quán)值請求.若是檢索請求,系統(tǒng)將檢索詞分詞后分別進(jìn)行檢索,并且將獲得的內(nèi)容進(jìn)行合并操作,然后根據(jù)權(quán)值時(shí)間等信息進(jìn)行相關(guān)度計(jì)算,排序后發(fā)送回用戶請求端口;若是權(quán)值請求,將會根據(jù)信息確定權(quán)值加減,然后更改其權(quán)值[5].
通過采用線程池的技術(shù),解決頻繁創(chuàng)建銷毀線程時(shí)占用大量CPU處理時(shí)間的問題,提高檢索速度.下面是建立線程池的核心代碼:
為了得到有序的檢索結(jié)果,需要一定的策略幫助用戶選擇最適合的內(nèi)容.本系統(tǒng)采用權(quán)值排序算法-TF/IDF相關(guān)性排序.
通過對搜索引擎技術(shù)的分析研究,設(shè)計(jì)并實(shí)現(xiàn)了一個(gè)小型搜索引擎.系統(tǒng)的索引建立及檢索用數(shù)據(jù)全部在內(nèi)存中存儲.測試環(huán)境為:CPU,Intel(R)Xeon(R)CPU E5-2630 0@2.30 GHz;MEM,64 G;System,CentOS release 6.2(Santiago).圖3是第一電商的用戶界面,圖4是輸入檢索詞“鄭州輕工業(yè)學(xué)院”后的檢索結(jié)果.
圖3 用戶界面Fig.3 Diagram of the User interface
圖4 輸入“鄭州輕工業(yè)學(xué)院”后的檢索結(jié)果Fig.4 The retrieval results after input"Zhengzhou University of Light Industry"
本文詳細(xì)介紹了小型搜索引擎的設(shè)計(jì)過程,并設(shè)計(jì)了一個(gè)小型搜索引擎系統(tǒng),實(shí)現(xiàn)用戶對網(wǎng)絡(luò)信息檢索的基本需求,結(jié)果令人滿意.但要實(shí)現(xiàn)一個(gè)功能完備的搜索引擎,還有許多問題要進(jìn)一步研究解決,如:隨著系統(tǒng)運(yùn)行時(shí)間的增長,索引會越來越大,當(dāng)內(nèi)存不足以存放該索引及索引文件時(shí),必須考慮硬盤存放的問題;備份服務(wù)器及多臺服務(wù)器共同服務(wù)造成分布式搭建時(shí)如何處理的問題以及更深層次的檢索優(yōu)化問題.
[1]邱哲,符滔滔.Lucene2.0+Heritrix搜索引擎[M].北京:人民郵電出版社,2007.
[2]王玉婷,杜亞軍,涂騰濤.基于Web鏈接的主題爬行蟲初始URL的研究[C]//第四屆全國信息檢索與內(nèi)容安全學(xué)術(shù)論文集(上),2008:324-333.
[3]趙敏涯.基于主題的新聞搜索引擎的設(shè)計(jì)與實(shí)現(xiàn)[D].揚(yáng)州:揚(yáng)州大學(xué),2006.
[4]Bharat K,Henzinger M.Method for ranking documents in a hyperlinked environment using connectivity and selective content analysis[C]//Proceeding of ACM-SIAM symposium on discrete algorithm,San Francisco,California,US,1998:17-21.
[5]Zobel J,Moffat A.Adding compression 10 a Full-Text retrieval system[J].Software Practice and Experience,1995,25(8):891-903.