]王子光+王子明
摘要摘要:搜索引擎技術應用廣泛。Lucene作為一個優(yōu)秀的搜索引擎開源工具包,可方便實現(xiàn)相關搜索引擎功能。介紹了Lucene搜索引擎工具包,在此基礎上,利用Lucene開發(fā)工具包,設計并實現(xiàn)了綜合查詢系統(tǒng)中搜索引擎功能。闡述了網絡爬蟲子系統(tǒng)、索引子系統(tǒng)和查詢子系統(tǒng)3個模塊功能。
關鍵詞關鍵詞:搜索引擎;網絡爬蟲;Lucene技術;Suggestion提示
DOIDOI:10.11907/rjdk.1511256
中圖分類號:TP319文獻標識碼:A文章編號文章編號:16727800(2017)001012603
引言
隨著互聯(lián)網技術的迅猛發(fā)展,形成了海量Web交互數(shù)據,搜索引擎成為用戶在海量數(shù)據中獲取有用信息的重要技術手段。綜合查詢系統(tǒng)作為當前管理信息系統(tǒng)的重要組成部分,承擔了系統(tǒng)查詢的大部分功能,是用戶進行查詢的重要接口。綜合查詢系統(tǒng)包括快速查詢、模糊查詢、組合查詢、關聯(lián)查詢等功能,一般是用戶根據查詢要素進行查詢,例如輸入某人的學號來查詢確切信息。但是在很多查詢場合,用戶往往不清楚自己所掌握的數(shù)據是哪一個查詢要素,例如只知道一個編號,但是不清楚這個編號是學號還是其它編號,這樣就無法根據查詢要素查詢,導致查詢效率大大降低。綜合查詢系統(tǒng)迫切需要一種類似搜索引擎的服務來方便用戶使用。
本文設計了一種基于Lucene的搜索引擎技術在綜合查詢系統(tǒng)的應用方案,并詳細闡述了該方案的設計與實現(xiàn)。
1Lucene開發(fā)工具包
Lucene作為一個優(yōu)秀的搜索引擎開源工具包,可以4結語
代碼質量問題已成為制約軟件持續(xù)發(fā)展的主要因素。代碼質量問題包括多個方面,但特征不夠明確和統(tǒng)一,自動檢測效果差,這些都為代碼質量檢查增加了難度[7]??煽匦宰鳛榇a質量評價的重要指標,越來越受到信息企業(yè)的關注[8]。它在整個產品線的長遠發(fā)展方面發(fā)揮著重要作用,有助于構建完整的軟件產品“生態(tài)系統(tǒng)圈”??煽匦圆粌H是代碼質量理論,更需要應用在程序編碼實踐之中。遵循可控性原則進行方案設計和代碼實現(xiàn),可進一步提高代碼質量,監(jiān)督控制程序代碼修改的風險,增加軟件產品應對需求變化的靈活性。
2基于Lucene的搜索引擎技術實現(xiàn)2.1網絡爬蟲設計與實現(xiàn)
網絡爬蟲是通過網頁的鏈接地址來尋找網頁信息,通常從網站的首頁開始讀取網頁內容,從中抽取網頁中的超鏈接地址,然后通過這些鏈接地址尋找下一個網頁,如此循環(huán),直到把網站所有的網頁都抓取為止[2]。搜索策略包括廣度優(yōu)先或深度優(yōu)先兩種形式。
網絡爬蟲根據抓取過程分為3個功能模塊:①網頁源文件獲取。通過獲取網頁的輸入流,將網頁源文件信息提取出來;②網頁超鏈接地址抽取。這個模塊就是分析網頁信息,抓取URL列表;③網頁文件寫入磁盤。這個模塊主要是將網頁數(shù)據寫入磁盤,然后進行索引查詢。
2.1.1網頁源文件獲取
通過與指定URL鏈接,獲取網頁輸入流,然后逐字符把網頁源文件輸入到一個字符串變量中。這一部分用到Java.net包下的URL類和URLConnection類,主要代碼如下:
.1.3網頁源文件寫入磁盤
因為文件名不能包括“/”等特殊字符,所以這部分要利用StringTokenizer類把每個獲得的超鏈接以“/”分隔,然后按照分隔出來的字符串依次建立相應的文件夾。例如:www.xxx.edu.cn/english/index.asp依次創(chuàng)建www.xxx.edu.cn文件夾,然后是其子文件夾english,最后是最內層文件夾index.asp,還要創(chuàng)建一個FileWriter對象把網頁源文件index.asp寫入到最內層的文件夾中。
實現(xiàn)網絡爬蟲功能后,網頁數(shù)據就寫入磁盤,然后索引子系統(tǒng)要對這些網頁源文件進行索引。
2.2索引子系統(tǒng)設計與實現(xiàn)
由于經過網絡爬蟲搜集的數(shù)據是在數(shù)據庫中存儲的,所以需要利用Lucene對數(shù)據庫中的數(shù)據進行索引。有兩種方式實現(xiàn)創(chuàng)建索引:①實時索引。在信息系統(tǒng)添加數(shù)據時就為該數(shù)據添加索引;②定時創(chuàng)建索引。文件為配置時間,在指定時間創(chuàng)建索引。索引完后就可以在索引文件中進行查詢,把結果返回給用戶。
2.2.1實時創(chuàng)建索引
實時創(chuàng)建索引是業(yè)務系統(tǒng)在增加數(shù)據時為新數(shù)據添加索引。本文設計實現(xiàn)了一個創(chuàng)建索引的公共方法createIndex,參數(shù)為新增加的數(shù)據對象。在該方法中使用Lucene搜索引擎包提供的IndexWriter對象向索引文件夾中寫入索引文件。創(chuàng)建索引時先從配置文件中讀取索引文件夾位置,判斷索引文件夾中是否存在索引文件。如果不存在則直接在索引文件中寫數(shù)據,如果已經存在,則向索引文件夾追加數(shù)據并不覆蓋原有數(shù)據;然后使用addDocument方法,把要索引的數(shù)據庫字段放到Document對象的Field中。Document很像數(shù)據庫中的一條記錄,而Field更像是數(shù)據庫中的字段[3]。
2.2.2定時創(chuàng)建索引
實時創(chuàng)建索引目的是將新增數(shù)據添加到索引文件中,但此時刪除數(shù)據索引文件并不會立即更新。為了解決上述問題,可設計實現(xiàn)一個定時創(chuàng)建索引方法。為了不影響業(yè)務正常開展,一般設定為次日凌晨,在該時間為數(shù)據庫中的所有數(shù)據信息重新創(chuàng)建索引。
在Web應用程序的web.xml配置文件中設置一個ServletContextListener,并在ServletContextListener實現(xiàn)類中創(chuàng)建一個Timer對象,調用Timer對象的schedule方法實現(xiàn)在指定時間執(zhí)行指定任務。
定時調度任務需實現(xiàn)一個方法,該方法繼承java.util.TimerTask類。從配置文件中讀取指定時間,設定兩個配置項,一個是索引文件夾路徑,一個是任務指定執(zhí)行時間。通過JDom技術讀取配置文件中的信息。由于ServletContextListener在整個Web應用程序中都存在,這樣就實現(xiàn)了定時創(chuàng)建索引的功能。
創(chuàng)建完索引后,就可在索引文件中查找用戶關注的信息,將用戶查詢結果返回給客戶端。
2.3查詢子系統(tǒng)設計與實現(xiàn)
前臺實現(xiàn)參照Google搜索引擎的Suggestion提示,通過Ajax技術與后臺動態(tài)交互數(shù)據,并利用JQuery的Autocomplete 插件實現(xiàn)類似Google輸入框中動態(tài)顯示搜索詞組下拉列表功能。搜索語句代碼如下:
參考文獻:
[1]郎小偉,王申康.基于Lucene的全文檢索系統(tǒng)研究與開發(fā)[J].計算機工程,2006(4):110.
[2]互動百科,網絡蜘蛛[EB/OL].http://www.baike.com/wiki/網絡蜘蛛.
[3]李剛,宋偉,邱哲.征服Ajax十Lucene構建搜索引擎[M].北京:人民郵電出版社,2006.
[4]成龍.Lucene搜索引擎開發(fā)進階實戰(zhàn)[M].北京:機械工業(yè)出版社,2015.
[5]羅剛.解密搜索引擎技術實戰(zhàn)[M].北京:電子工業(yè)出版社,2014.
[6]王子光.內蒙古移動需求全生命周期系統(tǒng)的設計與實現(xiàn)[D].北京:北京交通大學,2010.
[7]李剛.瘋狂Ajax講義[M].北京:電子工業(yè)出版社,2013.
責任編輯(責任編輯:杜能鋼)