齊勇軍
摘要:物聯(lián)網應用發(fā)展迅速,已經與互聯(lián)網技術相互融合。針對搜索引擎廣闊的應用前景以及分析國內外搜索引擎的發(fā)展現(xiàn)狀,根據(jù)搜索引擎系統(tǒng)的工作原理設計一種基于物聯(lián)網技術的搜索引擎。對搜索引擎進行了相關的研究。一個搜索引擎由搜索器、索引器、檢索器和用戶接口四個部分組成。搜索器的功能是在互聯(lián)網中漫游,發(fā)現(xiàn)和搜集信息。索引器的功能是理解搜索器所搜索的信息,從中抽取出索引項,用于表示文檔以及生成文檔庫的索引表。檢索器的功能是根據(jù)用戶的查詢在索引庫中快速檢出文檔,進行文檔與查詢的相關度評價,對將要輸出的結果進行排序,并實現(xiàn)某種用戶相關性反饋機制。用戶接口的作用是輸入用戶查詢、顯示查詢結果、提供用戶相關性反饋機制。結合搜索引擎發(fā)展現(xiàn)狀分析了搜索引擎的系統(tǒng)功能需求,并進行了可行性論證,進而提出了基于java的技術方案,明確采用jsoup、elasticsearch、jfinal等相關開發(fā)技術;然后通過網絡爬蟲抓取數(shù)據(jù)下載到本地,建立索引;在系統(tǒng)實現(xiàn)環(huán)節(jié),重點對需求分析中確定的主要功能模塊進行代碼編程、修改及優(yōu)化;最后,設計了若干具體測試用例對系統(tǒng)進行了較全面的測試,驗證設計效果。
關鍵詞:物聯(lián)網;搜索引擎;網絡爬蟲;索引器;jsoup
中圖分類號:TP311 文獻標識碼:A 文章編號:1009-3044(2017)02-0274-03
隨著信息技術與物聯(lián)網技術的不斷發(fā)展和融合,越來越多的產業(yè)與行業(yè)廣泛應用了物聯(lián)網技術,如工農業(yè)、智能家居、快遞物流、設備監(jiān)控等,物聯(lián)網中包含很多實體,這就意味著海量的實時數(shù)據(jù)需要傳輸、存儲及有效展示。面對越來越多的傳感器及其所產生的數(shù)據(jù),只有結合智能的物聯(lián)網搜索,才能最大限度地實現(xiàn)這類數(shù)據(jù)的價值。
1 模塊設計
本搜索引擎由四個模塊組成,主要包括網頁抓取模塊,網頁內容抽取模塊,內容索引模塊和內容呈現(xiàn)模塊。系統(tǒng)的模塊流程圖1如下:
1.1 網頁抓取模塊
網頁抓取模塊主要完成對指定站點進行網頁的抓取并將所抓取的網頁保存到本地數(shù)據(jù)庫。
本系統(tǒng)是從鳳凰、騰訊、網易、搜狐新聞網上爬取相關的網頁,輸入鳳凰、騰訊、網易、搜狐新聞網的頁面的URL作為種子URL。通過分析鳳凰、騰訊、網易、搜狐新聞網的網頁URL的格式,對網絡爬蟲抓取和分析網頁的行為進行一定的控制,限定應抓取的網頁的URL格式以及限定能進入待爬取的URL隊列的URL的格式。提高網絡爬蟲爬取速度可以通過改善URL的分配策略,使網絡爬蟲的并發(fā)線程增多。通過限制對Robot文件的訪問,也是提高爬蟲爬取網頁效率的一個方法。網頁抓取模塊的功能需求如圖2所示
1.2 網頁內容抽取模塊
網頁內容抽取模塊主要負責從本地文件所存儲的網頁中按照某種抽取規(guī)則抽取所需信息,并將所得到的信息按照特定的格式保存到數(shù)據(jù)庫中。
通過對具有代表性的目標頁面進行分析,制定信息抽取規(guī)則,實現(xiàn)對網頁上各種內容的定位,抽取網頁文本內容。構建網頁信息詞庫,通過分詞器解析抽取出所需網頁信息內容,并將其寫到指定詞庫文件中。將提取的網頁非結構化信息轉化成結構化信息存儲到數(shù)據(jù)庫中。
網頁內容抽取模塊的功能需求如圖3所示。
1.3 內容索引模塊
利用Luence索引工具對數(shù)據(jù)庫中結構化信息建立索引文件,然后把創(chuàng)建好的索引文件保存到磁盤中,根據(jù)用戶輸入的查詢條件在索引文件中進行查詢,最終查詢結果按照一定的順序進行排序返回給用戶。
網頁內容索引模塊的功能需求如圖4所示。
1.4 內容呈現(xiàn)模塊
通過jsp技術,以Web的形式展示用戶界面,當用戶在此界面輸入關鍵詞時,根據(jù)用戶的關鍵詞從數(shù)據(jù)庫中匹配相關網頁,把相關網頁根據(jù)一定的排序規(guī)則返回顯示在用戶界面。
2 詳細設計
2.1 網頁抓取
網絡爬蟲是一個自動提取網頁的程序,它為搜索引擎從萬維網上下載網頁,是搜索引擎的重要組成。傳統(tǒng)爬蟲從一個或若干初始網頁的URL開始,獲得初始網頁上的URL,在抓取網頁的過程中,不斷從當前頁面上抽取新的URL放入隊列,直到滿足系統(tǒng)的一定停止條件。聚焦爬蟲的工作流程較為復雜,需要根據(jù)一定的網頁分析算法過濾與主題無關的鏈接,保留有用的鏈接并將其放入等待抓取的URL隊列。然后,它將根據(jù)一定的搜索策略從隊列中選擇下一步要抓取的網頁URL,并重復上述過程,直到達到系統(tǒng)的某一條件時停止。該模塊通過網絡爬蟲從鳳凰、騰訊、搜狐、網易新聞網中的網頁爬取我們想要的頁面URL。爬蟲開始時,我們添加種子URL到URL請求隊列中,我們輸入的種子URL為鳳凰、騰訊、搜狐、網頁新聞網的頁面的URL。通過對鳳凰、騰訊、搜狐、網易新聞網的頁面的URL格式進行分析,當?shù)玫降腢RL地址滿足鳳凰、騰訊、搜狐、網易網頁面的URL格式,則將它添加到URL請求隊列中。
網絡爬蟲的工作流圖如圖5所示。
定制網絡爬蟲抓取鳳凰網:
parser="org.webspider.parser.NewsIfengParser" listener="org.webspider.listener.DbSpiderListener" host="news.ifeng.com" forbidden="">
2.2 網頁信息抽取
網頁內容抽取主要負責將本地文件所存儲的網頁中按照某種抽取規(guī)則抽取所需信息,并將所得到的信息按照特定的格式保存到數(shù)據(jù)庫中。
遍歷存儲所抓取網頁的本地文件夾,如果遍歷到網頁,則運用jsoup對網頁的標題,作者,時間,正文實現(xiàn)定向抓取。將抓取的內容保存為.txt文件存放到指定文件夾中。將抓取到的內容,如網頁鳳凰網新聞的標題,作者,發(fā)布時間,正文,鏈接地址,分別存入到數(shù)據(jù)庫news表中的相應列。
網頁信息抽取流程圖6如下。
實現(xiàn)的關鍵代碼:
public class DefaultParser implements Parser{
@Override
public List
//創(chuàng)建一個List,存放解析出來的Map
List
//通過網頁的html,創(chuàng)建一個Document
Document doc = Jsoup.parse(page.getContent());
//創(chuàng)建一個map,用于存放解析的具體字段
Map
//把網頁的原始url放入map
data.put("origin_url", page.getUrl());
//利用jsoup的選擇器,提取標題title這個元素
Elements title = doc.select("title");
//得到標題的文本,并放到map里去
data.put("title", title.text());
//解析得到的map,放入list里去
datas.add(data);
//返回解析結果List
return datas;}}
2.3 內容索引
利用Luence索引工具對數(shù)據(jù)庫中結構化信息建立索引文件,然后把創(chuàng)建好的索引文件保存到磁盤中,根據(jù)用戶輸入的查詢條件在索引文件中進行查詢,最終查詢結果按照一定的順序進行排序返回給用戶。
實現(xiàn)的關鍵代碼:
/*索引一個索引庫的數(shù)據(jù) * * @param indexConfig Index */
private void indexData(Index index) throws Exception {
StringTokenizer stFetcher = new StringTokenizer(index.fetcher, FETECHER_SPLIT);
while (stFetcher.hasMoreTokens()) {String strFectcherName = stFetcher.nextToken();
Fetcher iFetcher = (Fetcher)new ObjectUtility().newInstance(strFectcherName);
int records = iFetcher.doIndex(index);
LOG.info(index.name + ", Index Records:" + records + ", Fetcher Class:" + strFectcherName);
} }
2.4 搜索引擎界面設計
本搜索引擎界面簡單清新。其效果圖如圖8所示。
3 結束語
針對物聯(lián)網技術產生的大量數(shù)據(jù),設計了一種搜索引擎,并將核心功能完成,能應用于實際。本搜索引擎有如下功能:
1)通過對網絡爬蟲的擴展?jié)M足自己從網絡站點抓取相關信息的要求
2)通過jsoup網頁解析工具實現(xiàn)對目標網頁進行抽取,并將抽取內容保存到數(shù)據(jù)庫中。
3)通過luence檢索工具完成對存儲在數(shù)據(jù)庫中信息的索引,最后通過jsp向用戶展示所抓取并過濾后的信息。
4)與MYSQL數(shù)據(jù)庫結合使用,減少企業(yè)的開銷成本,同時,在數(shù)據(jù)處理方面,MYSQL數(shù)據(jù)庫提供了很大的優(yōu)勢,在數(shù)據(jù)的返回處理方面,減少了結果集的負擔,同時,也加快了數(shù)據(jù)的傳輸。
5)系統(tǒng)界面簡單美觀。
最后,本文通過對搜索引擎的分析與測試,表明對基于JAVA的搜索引擎的設計與實現(xiàn)是成功的,該搜索引擎性能穩(wěn)定,高效。
綜上所述,本課題成功地實現(xiàn)和設計了基于JAVA的搜索引擎,并結合了MYSQL數(shù)據(jù)庫的使用,軟件的UI交互設計友好。
參考文獻:
[1] 袁津生, 李群, 蔡岳. 搜索引擎原理與實踐[M]. 北京: 北京郵電大學出版社, 2008, 11.
[2] 鄭宇衛(wèi). 基于Lucene構建的Web服務搜索引擎[J]. 電腦編程技巧與維護, 2015.
[3] 任麗蕓. 搜索引擎中文分詞技術研究[D]. 重慶: 重慶理工大學, 2011.
[4] 邱哲, 符滔滔. 開發(fā)自己的搜索引擎--Lucene 2.0+Heritrix[M]. 北京: 人民郵電出版社, 2007-06.
[5] 桂許軍. 基于JavaEE平臺與Lucene的信息文檔搜索引擎系統(tǒng)的設計與實現(xiàn)[D]. 成都 西南交通大學, 2011.
[6] Cay S.Horstmann, Gary Cornell.Core Java 2, Volume 1-Fundamentals,6E[M].Prentice Hall/Pearson, 2003.
[7] Bruce Eckel. Thinking in Java[Z].4th ed. 2007.