張弘弦 田玉玲



摘 要: Web垂直搜索引擎是一個復雜的信息系統,目前大多數研究都集中在解決搜索引擎中出現的某一個方面的問題,仍缺乏對Web垂直搜索引擎完整實現過程的相關研究。針對這個問題,提出一種三層架構的Web垂直搜索引擎的實現過程,整個過程包含數據準備、查詢處理和界面交互。使用Java語言和相關的開源工具,對實現過程描述的具體任務進行實際操作,實現了一個查詢手機信息的Web垂直搜索引擎。該三層架構和實現過程有效地為構建面向主題的完整Web垂直搜索引擎提供了理論依據和實踐指導。
關鍵詞: Web搜索; 搜索引擎實現; 垂直搜索架構; 爬蟲
中圖分類號: TN911?34 文獻標識碼: A 文章編號: 1004?373X(2016)08?0055?05
Research on implementation process of Web vertical search engine
ZHANG Hongxian, TIAN Yuling
(School of Computer Science and Technology, Taiyuan University of Technology, Taiyuan 034000, China)
Abstract: The Web search engine is a complex information system. However, most researches are concentrated on one detailed problem appearing in a aspect of the search engine, but they lack of the correlational research on the complete implementation process of Web vertical search engines. Aiming at this problem, the implementation process of a Web vertical search engine with a three?layer architecture is proposed, in which data preparation, query processing and interface interaction are contained. An actual operation of a certain task describing the implementation process was performed with Java platform and relative open?source tools. And by this operation, the Web vertical search engine that could query mobile information was realized. The three?layer architecture and implementation process provide a theoretical basis and practical guidance for building a complete subject?oriented Web vertical search engine.
Keywords: Web search; search engine implementation; architecture of vertical search engine; crawler
0 引 言
從2000年開始,Web垂直搜索引擎開始贏得用戶的親睞[1?2]。視頻、音樂、圖片、軟件、貼吧、地圖分門別類展開搜索,專業性更強,主題相關性更高。然而Web垂直搜索引擎的應用主題并不局限,擁有非常廣闊的發展空間,例如面對電子商務的商品搜索,數碼產品信息搜索以及近年開始出現的微博搜索。垂直搜索的出現主要有兩個方面的原因:一是通用搜索引擎索引Web的全部內容變得越來越難,而垂直搜索引擎索引數據量較小且專業,投入成本也相對較低;二是垂直搜索引擎提供的搜索質量較高,因為它可以搜索到通用搜索引擎不能搜尋到的頁面,而且在可搜索頁面上提供更強有力的搜索功能。垂直搜索引擎與通用搜索引擎的最大區別在于對網頁信息進行結構化信息抽取,即將網頁的非結構化數據提取成特定的結構化數據。構建一個垂直搜索引擎主要有兩種方法:一種方法是通過爬蟲爬取某種主題網頁而構建專業索引;另一種方法是為用戶提供專業化搜索的接口。
Web搜索引擎是種復雜、多組件信息檢索系統的具體應用[3],也因其應用在擁有超大規模數據的互聯網中,使構建Web搜索引擎變得比較困難。已有眾多的研究者參與到Web搜索引擎的研究中,Brin和Page發表論文首次公開大規模Web搜索引擎Google的設計原型[4],提出Web搜索引擎的基本組件包括爬蟲(Crawler)、索引組件、搜索組件、排序系統以及反饋組件。高效Web垂直搜索的關鍵之一在于爬蟲能否精確爬取主題相關的Web文檔,Soumen等人提出聚焦爬蟲[5](Focused Crawler),利用一種能夠評估網頁是否與主題相關的分類器選擇性地爬取與預定義主題相關的頁面,實現了以目標為導向的爬取。文獻[6]開發了一種潛語義索引分類器,將鏈接分析和文本內容結合起來,目的是抓取指定主題域的Web文檔。文獻[7]設計并實現了一種基于網格架構的大型Web搜索引擎,討論實現流程和細節,對Web垂直搜索引擎的研究提供了寶貴的經驗。信息檢索領域的研究成果對Web搜索引擎有著較高的參照價值,特別是檢索模型的研究更加重要,Web搜索引擎的排序組件好壞很大程度上決定了用戶體驗。信息檢索模型得到了飛速發展,傳統的檢索模型包括布爾模型、向量空間模型、概率模型、語言模型。現代檢索模型的建立大多通過排序學習方法得到,即利用機器學習技術在數據集上自動創建排序模型[8]。這些研究成果很多通過開源軟件實現,這些工具不僅為開發軟件提供先進的技術支持,而且大大縮短了開發周期。
本文提出了一種Web垂直搜索引擎的實現過程,以該過程為基礎開發了一個查詢與手機相關信息的Web垂直搜索引擎,并且對實現原理和細節進行了詳細的闡述。此垂直搜索引擎可以為搜索手機相關信息的用戶提供直觀的、快捷的、有效的手機信息搜索服務,驗證了這種實現過程的有效性和完整性。
1 Web垂直搜索引擎的實現過程
Web垂直搜索引擎與通用搜索引擎原理類似,都需要從互聯網上下載網頁、建立索引,響應用戶查詢。但是垂直搜索引擎可以返回結構化的數據,這些數據經過人工分析與整理再存入數據庫中。本文將Web垂直搜索引擎的實現過程分為3層,分別為:數據準備層、提供查詢服務層、前臺交互層。這3層可互相獨立開發,最終整合到一起形成一套完整的Web垂直搜索引擎。圖1為一種Web垂直垂直搜索引擎實現過程。
1.1 數據準備層
數據準備層的目的是準備用于檢索的數據,這些數據最終存放在關系數據庫中并建立倒排索引。Web垂直搜索引擎的目的是為用戶提供更專業、主題性更強的搜索服務,這種服務與大量主題相關的數據為基礎,數據處理分為兩個階段,第一個階段為采集原始數據,原始數據來自互聯網某些主題性較強的、數據來源可靠的網站。原始數據大多是未經處理的無結構網頁,這些原始網頁無法支持搜索服務并返回給用戶查看。第二階段為數據分析與處理,將原始無結構網頁中的數據轉換為結構化數據,并將這些結構化數據存儲在關系數據庫中,這些存儲在數據庫中數據最終以更加直接的形式展示給用戶。然而,關系數據庫中模糊查詢難以應對海量數據查詢,所以需要建立一種面向詞匯的數據結構,即倒排索引,以實現毫秒級的查詢性能。
數據準備層主要包含以下5個過程:
(1) 選擇主題信息來源網站和網頁
認真選擇主題信息來源網站以確保原始數據的可靠性,通常需要遵循以下4個原則:來源網站沒有屏蔽爬蟲對網頁的爬取;網頁內容不是JavaScript動態生成的。爬蟲不需要模擬瀏覽器解釋腳本去生成網頁內容,否則會嚴重影響爬蟲效率;網站中網頁URL有統一的風格。這樣的URL更容易被爬蟲抓取,數據更加準確;選擇訪問量比較大的知名網站,保證數據源可靠性。
(2) 網站和網頁內容分析
分析網頁的目的是定向抓取網頁,在確定主題信息來源網站之后,為了能夠準確獲取主題數據,需要對網站的URL結構進行分析,找出實際擁有主題信息的一級URL頁面,該頁面通常擁有該主題下全部子主題的二級URL鏈接,分析出這些二級URL鏈接作為種子鏈接交給爬蟲。分析方法主要以人工觀測為主,以程序分析為輔。通過觀察一級網頁URL規律,查看網頁源碼,再設計抽取二級URL的計算機程序,利用程序自動抽取種子鏈接。
(3) 定向抓取網頁
抓取網頁的目的是把主題相關的網頁下載到本地磁盤。爬蟲是一種能夠從互聯網上自動抓取網頁并下載到本地的程序,這種程序的輸入是一些URL鏈接,這些鏈接也稱之為種子,爬蟲抓取種子網頁的結果是將所有相關目標網頁下載到本地磁盤中。
(4) 分析并抽取網頁內容到本地
將網頁中無規則的數據規范地保存到本地文件中,數據保存采取統一的格式,使其能夠存入數據庫并建立全文索引。
(5) 存入數據庫并建立索引
格式化的數據不能僅存儲在文本文件中,否則提取數據的開銷非常大。將數據存儲到數據庫中,使用數據庫統一管理所有數據,這樣訪問速度與安全性也大大增強。搜索引擎中數據準備過程中最關鍵的技術就是建立索引,用戶查詢首先訪問的是索引而不是數據庫,通過索引查找關鍵詞然后返回結果文檔的數據庫ID,再到數據庫中查找具體記錄。
數據準備層的任務集中于數據采集、預處理、數據存儲以及索引。這一層的活動對用戶不可見,最終的產物是保存主題相關結構化數據的數據庫以及這些數據上的倒排索引。
1.2 提供查詢服務層
查詢服務層首先將用戶的查詢字符串轉換為可識別的對象,并進行預處理,然后發送給相應的查詢方法處理,最后返回與查詢字符串匹配的數據對象列表。要得到最后的數據對象列表實際經過2次查詢,第一次查詢倒排索引得到所有相關文檔ID,這次查詢的時間復雜度是O(1),因為倒排索引的詞典結構多為哈希表。第二次查詢將文檔ID發送至數據庫引擎,根據文檔ID查詢文檔的全部信息,并且將所有查詢到的文檔以對象的方式返回。
1.3 前臺交互層
前臺交互層的重點主要是加強用戶輸入和輸出的體驗,主要包含兩個方面:一是隨著用戶按鍵自動彈出提示關鍵字列表;二是直接展示查詢結果詳細信息。列表提示功能使用Ajax異步響應,當onkeyup事件發生后,向數據庫服務器發送模糊查詢SQL語句,將查詢結果列表返回給JavaScript代碼,JavaScript修改dom將提示列表展示在搜索框下面。查詢結果顯示數據要直接,例如查詢數碼產品的結果中,產品圖片和參數直接顯示在頁面上,技術上同樣是利用Ajax技術減少延時來增加用戶體驗。
2 Web垂直搜索引擎具體實現
下面基于以上實現過程在Java平臺上構建查詢手機相關信息的Web垂直搜索引擎,構建過程分別按照圖1中的3層進行實現,并對關鍵技術和實現原理進行總結和描述。
2.1 數據準備層實現
(1) 選擇主題信息來源網站和網頁。根據選擇主題網站的原則,最終確定選擇太平洋電腦網(http://www.pconline.com.cn/)作為手機信息數據的來源網站,數據源網站可以有多個。作為一個綜合性IT網站,手機頻道的一級URL頁面為:
http://product.pconline.com.cn/mobile/list.shtml
(2) 網站和網頁內容分析。通過查看一級URL頁面源碼,并且分析網站URL鏈接規律,得出手機信息數據所在的URL地址規格,如下所示:
手機信息:http://product.pconline.com.cn/mobile/品牌/編號.html。
手機圖片:http://img.pconline.com.cn/images/product/編號
確定URL規格的目的是為了確定抓取哪些URL規格的頁面。獲取所有手機品牌的URL鏈接后將這些鏈接作為種子,送給爬蟲抓取。
(3) 定向抓取網頁。爬蟲的輸入是待抓取URL種子鏈接,而爬蟲抓取的結果就是將預定抓取的HTML和圖片等資源下載到本地磁盤。本次開發使用開源爬蟲框架Heritrix[9],它是一個開源的Java爬蟲框架,它保留了各種各樣的配置接口用于定制和擴展爬蟲的功能,為了能夠準確抓取目標資源,從官方文檔中了解Heritrix本身運行機制并進行配置和定制。
(4) 分析并抽取網頁內容到本地抓取到的原始網頁和圖片不能被直接利用,需要將網頁中的有用數據抽取出來并以一定的格式保存起來,這個過程可以稱之為結構化數據提取。每一個有效的HTML文件都對應一個txt文件,txt文件的內容和文件名稱都有固定的結構。本次開發中將文件名規范為這樣的格式:“手機名?型號?時間字符串.txt”。txt文件的內容格式如下:
原始網頁URL
品牌名(如華為)
價格
屬性名1:值1(如操作系統:android2.2)…
============================
產品圖片編碼后的文件名
結構化提取包含3個過程:一個是文件的I/O操作,此操作可以使用Java.io包實現;另一個是從HTML網頁中提取數據,此操作可以使用開源解析軟件實現;第三個過程是對圖片進行轉存處理,這個過程的目的是將手機信息和圖片名稱進行映射,新圖片名將原圖片名經過MD5編碼后得到。HTML元素之間是以分層嵌套的結構組織在一起的,HTML文檔的這種結構稱為HTML文檔樹。本次開發中使用開源HTML解析庫HtmlParser[10],使用這個庫可以方便快速地從HTML網頁中提取標簽節點,文本節點和和屬性節點的值。同樣,在開發過程中使用該解析包需要了解其API和調用機制,這些內容來源于官方文檔。
(5) 存入數據庫并建立索引。磁盤中的數據文件是結構化數據,但是仍然不能直接作為查詢的直接數據源,其原因在于磁盤I/O速度較慢。故而將這些文件的信息存入關系數據庫中,數據庫表的字段對應文件內容結構的字段,每一個文件的數據都對應表的一條記錄。在查詢數據庫時按照產品的主關鍵字(如ID號)查詢,查詢效率較高。但是用戶的查詢是若干關鍵詞,實際是字符串格式,如果直接將查詢關鍵詞放入SQL語句中,向數據庫發送模糊查詢匹配關鍵詞,那么對于成千上萬的記錄來說效率非常低。所以,并不能直接對數據庫進行查詢關鍵詞的模糊查詢,而首先將查詢發送給倒排索引進行查詢。
倒排索引一種面向詞匯的查找結構,通常使用哈希表存儲,故查詢效率非常高。倒排索引包括兩個部分:一個部分是詞典;另一個部分是倒排列表。建立索引的過程中,首先要使用分詞程序對手機信息文本文件分詞建立詞典,每個詞典項中包含一個指向對應倒排列表的指針,倒排列表由若干倒排項組成,倒排項存儲的是包含該詞匯的文檔屬性(文檔ID,詞頻,單詞在該文檔中出現的位置)。
用戶的查詢首先由同樣的分詞程序切割為若干詞匯,然后查詢詞典找出對應倒排列表,按照某種規則對倒排列表進行合并,然后將最后的文檔列表ID發送給數據庫查詢整個文檔信息,進而將數據庫的返回結果展示給用戶。綜上,用戶的查詢處理過程為:“查詢索引”→“獲取每個相關文檔的數據庫ID”→“查詢數據庫”→“返回給用戶”。這種查詢機制決定了必須先將手機信息存儲在數據庫,然后建立索引,構建索引和執行查詢的機理如圖2所示。
本次開發中使用MySQL數據庫存儲數據,使用開源Java全文檢索工具包Lucene建立索引[11],使用基于詞庫的字符串匹配分詞模式,以正向最大匹配為分詞算法,配合極易中文分詞組件進行分詞。基于詞庫的分詞原理是使用正向最大匹配算法掃描待分詞文本,將掃描出的詞匯與詞庫中的詞進行比對,按照一定的匹配粒度去判別該詞匯是否被切分出來加入索引中,所以分詞前必須在原有詞庫基礎上增加主題相關的詞匯作為詞庫的一部分,開發中首先解析所有txt文件名,將所有手機名稱和不同的型號解析出來作為詞匯單獨存儲在一個文本文件中,通過簡單的配置即可將文件的詞匯加入到極易分詞的詞庫中,選用極易分詞組件的另一個原因是它實現了Lucene標準分詞解析器的接口,從而可以直接整合進Lucene[12]。對于查詢字符串必須使用同樣的分詞程序去分詞,以同樣的規則切分出待查詢詞匯,在索引的詞典中查詢是否存在該詞匯,如果存在則返回該詞匯對應的倒排列表,否則返回空,對于多詞匯查找的處理是根據邏輯運算對倒排列表進行合并后再返回。倒排列表中的文檔排序模型是經典的向量空間模型,該模型以文檔的TF*IDF值為向量的特征,實際參數可以在Lucene中按需設置。
圖2 索引與查詢機理圖
2.2 提供查詢服務層實現
提供查詢服務作為一個中間層,在整個搜索引擎中起著非常重要的連接作用,它接收用戶的查詢字符串并預處理,然后在索引和數據庫中查詢相關文檔并返回給用戶。
通過圖2可知搜索模塊和分詞模塊一起提供查詢服務,實驗中分詞模塊與建立索引所用分詞的模塊有相同的配置,而搜索模塊承擔查詢索引和數據庫的任務,由Lucene提供的搜索模塊實現,開發中這2個任務分別由2個方法實現,它們是查詢服務類中的2個方法,查詢索引方法的參數是查詢關鍵詞對象,返回的是相關文檔列表對象,查詢數據庫方法的參數是整型的文檔ID,返回文檔對象,如圖3所示。
2.3 前臺交互層實現
前臺交互是直接面向用戶的應用層,為了增加用戶在輸入和輸出上的體驗,分別實現2種功能:一是用戶每次敲擊按鍵時都會提示關鍵詞列表;二是結果列表頁面上直接展示主要結果,包括圖片和其他重要屬性。開發中,列表提示的數據來源于已經抽取得到的手機相關詞匯,將這些詞匯存入MySQL數據庫的一張表里,針對該表設計一個查詢方法,參數是用戶按鍵后提交的當前字符串,實現機理是向該表發送模糊查詢,返回字符串數組(一般規定提示字符串個數不超過10)。
圖3 前臺交互層與提供查詢服務層交互
該方法的調用是通過用戶觸發onkeyup事件,隨即以Ajax機制向服務器發送字符串并完成調用,前端通過Ajax代碼接收返回的字符串數組作為顯示數據,使用JavaScript改變dom的方式將這些字符串以列表的方式顯示在輸入框的下面。當點擊搜索按鈕后,開始向服務器發送查詢,前臺交互層與中間層的交互如圖3所示,它們的交互通過Ajax框架DWR來完成,這樣有效降低延時,能夠明顯提高用戶體驗。用戶查詢的關鍵字(query)以及每頁的起始索引號(startindex)封裝在Request對象中,直接通過Ajax發送給查詢服務層的SearchServiceImpl對象的getSearchResults方法,該方法返回的SearchResults對象包含了相關文檔ID的列表,然后將文檔的ID作為參數發送給getSearchResultById方法查詢數據庫,返回文檔全部信息并封裝在SearchResult對象中,最后將SearchResult對象返回到前臺展示給用戶。
3 結 論
實驗中多次查詢的平均時間在毫秒級,完成了整個Web垂直搜索引擎的設計目標。驗證了這種實現過程的完整性和有效性。提出的三層架構面向的是構建主題相關的Web垂直搜索引擎,通過實現查詢手機信息的Web垂直搜索引擎來提供一種可操作的實施方案,為成功構建其他面向其他主題的Web垂直搜索引擎提供理論依據和技術參照。整個實現過程利用了Java平臺下的優秀開源軟件包,包含了可定制爬蟲Heritrix、網頁解析庫HTMLParser、索引及查詢工具包Lucene、Ajax框架DWR、Bean容器Spring以及MySQL數據庫,這些開源軟件為搜索引擎的實現提供了強大的支持,對于這些軟件的具體使用方法和過程本文沒有詳細贅述,而重點討論了構建搜索引擎的實現過程、技術要點和方法。
由于垂直搜索引擎索引數據本身就是面向主題的,所以檢索結果的主題相關度、正確率必然比通用搜索引擎高,而且展示數據的能力更強。縱觀現有的研究成果,作者認為未來Web垂直搜索引擎主要的研究方向有以下幾個方面:
(1) 結構化數據提取自動化。爬蟲應該能夠自動發現、發掘Web上主題相關的來源網站,并能夠自動對網站內容評級,能夠實時監控Web主題網站的頁面變化并更新本地的頁面,通過自動化的爬蟲的監控、爬取、抽取與更新操作增強搜索引擎的靈活性。
(2) 用戶個性化。個性化搜索引擎盡管理論上已經得到發展,但是從理論到實際應用還需要繼續研究,搜索引擎應該能夠自動識別用戶種類、意圖,對用戶的需求進行精確預測,并對歧義進行自動矯正,重點在推薦系統、相關反饋方面進行完善。
(3) 數據可靠性。由于垂直搜索引擎的返回結果大多是領域相關的內容,返回給用戶的結果應該對用戶負責,在醫療、問答、新聞、學術等領域的返回結果應保證數據來源的準確性,對排名靠前的結果應特別進行自動的審核,保證信息的可靠性。
本文通訊作者為田玉玲。
參考文獻
[1] 劉天嬌,周瑛.淺析近年來網絡搜索引擎研究現狀:以2001至2010年為例[J].情報科學,2012(8):1192?1195.
[2] 王文鈞,李巍.垂直搜索引擎的現狀與發展探究[J].情報科學,2010(3):477?480.
[3] 王斌.從信息檢索到搜索引擎[J].產品安全與召回,2009(4):38?43.
[4] BRIN S, PAGE L. The anatomy of a large?scale hypertextual Web search engine [J]. Computer networks and isdn systems, 1998, 30: 107?117.
[5] CHAKRABARTIA Soumen, VAN DEN BERGB Martin, DOMC Byron. Focused crawling: A new approach to topic?specific Web resource discovery [J]. Computer networks, 1999, 31: 1623?1640.
[6] ALMPANIDIS G, KOTROPOULOS C, PITAS I. Combining text and link analysis for focused crawling: An application for vertical search engines [J]. Information systems, 2007, 32(6): 886?908.
[7] CAMBAZOGLU Barla, KARACA Evren, KUCUKYILMAZ Tayfun, et al. Architecture of a grid?enabled Web search engine [J]. Information processing & management, 2007, 43(3): 609?623.
[8] LIU Tie?yan. Learning to rank for information retrieval [J]. Foundations and trends in information retrieval, 2009, 3: 225?331.
[9] 白萬民,蘇希樂.Heritrix在垂直搜索引擎中的應用[J].計算機時代,2011(9):7?9.
[10] 桂林斌.基于HtmlParser抽取動態異構Web信息的研究與實現[J].計算機與數字工程,2009,37(7):161?164.
[11] 張俊,李魯群,周熔.基于Lucene的搜索引擎的研究與應用[J].計算機技術與發展,2013,23(6):230?232.
[12] 黃翼彪.實現Lucene接口的中文分詞器的比較研究[J].科技信息,2012(12):246?247.