陳娟
(咸陽師范學(xué)院 陜西省咸陽市 712000)
隨著互聯(lián)網(wǎng)的發(fā)展,信息種類越來越多,信息量越來越大,用戶想找到所需的資料簡直如同大海撈針,為滿足大眾信息檢索需求的專業(yè)搜索網(wǎng)站便應(yīng)運(yùn)而生了。搜索引擎(search engine)是一個用戶通過查詢關(guān)鍵字從互聯(lián)網(wǎng)中搜索出信息的特定系統(tǒng)。搜索引擎系統(tǒng)會對互聯(lián)網(wǎng)中的所有信息資源進(jìn)行搜索、整理和分類,同時將這些信息存儲在網(wǎng)絡(luò)數(shù)據(jù)庫中,用戶只需在客戶端輸入查詢關(guān)鍵字,即可與數(shù)據(jù)庫中的信息進(jìn)行比對,并將最終結(jié)果顯示給用戶。因此搜索引擎包含了信息搜索、信息分類、用戶查詢?nèi)糠?。目前,由于智能手機(jī)的廣泛使用,搜索引擎已經(jīng)從計算機(jī)轉(zhuǎn)移到了更便于攜帶的手機(jī)上,讓用戶隨時隨地可上網(wǎng)搜索資源。
根據(jù)工作方式的不同,搜索引擎可以分為目錄索引類搜索引擎(Search Index/Directory)、全文搜索引擎(Full Text Search Engine)和元搜索引擎(Meta Search Engine)。目錄索引類搜索引擎嚴(yán)格意義上不是一個搜索引擎,它只是一個按目錄分類的網(wǎng)站鏈接列表,用戶不是依靠關(guān)鍵詞(Keywords)進(jìn)行查詢,而是根據(jù)分類目錄找到相關(guān)信息,常見的目錄索引搜索引擎如雅虎、新浪和網(wǎng)易等;全文搜索引擎是從互聯(lián)網(wǎng)中提取各個網(wǎng)站的文字信息,建立起網(wǎng)絡(luò)數(shù)據(jù)庫,根據(jù)用戶輸入的查詢關(guān)鍵字檢索出相匹配的記錄并返回結(jié)果。它的數(shù)據(jù)庫是通過一個叫“網(wǎng)絡(luò)爬蟲”或“網(wǎng)絡(luò)蜘蛛”的軟件自建網(wǎng)頁數(shù)據(jù)庫,搜索結(jié)果直接從自身的數(shù)據(jù)庫中調(diào)用,比如著名的Google 和百度搜索;元搜索引擎是同時在多個搜索引擎上搜索,將信息返回給用戶。本文主要通過研究全文搜索引擎相關(guān)技術(shù),設(shè)計一個基于Java 的搜索引擎系統(tǒng),系統(tǒng)采用B/S 架構(gòu),前臺頁面使用JSP 開發(fā),后臺采用Mysql 數(shù)據(jù)庫來實(shí)現(xiàn)數(shù)據(jù)存儲和查詢。
Lucene 是由Apache 軟件基金會支持和提供的一個成員,它是用于全文檢索的開源程序庫。Lucene 并不是一個功能完善的搜索引擎,它其實(shí)是為開發(fā)人員提供的一個簡單易用的工具包,目的是在目標(biāo)系統(tǒng)中實(shí)現(xiàn)全文檢索的功能。同時,Lucene 在Java 開發(fā)環(huán)境里是一個成熟的免費(fèi)的工具包,因此,開發(fā)人員可以簡單、方便的在目標(biāo)系統(tǒng)中實(shí)現(xiàn)全文檢索的功能,或者是以此為基礎(chǔ)建立起完整的全文檢索引擎,因此它是目前最受歡迎的免費(fèi)Java 信息檢索程序庫。在應(yīng)用場景中,對于數(shù)據(jù)量非常大的數(shù)據(jù)可采用全文檢索方式進(jìn)行搜索,比如我們熟知的百度、Google 等搜索引擎,還有在各大論壇、購物網(wǎng)站等進(jìn)行站內(nèi)搜索時都會用到。
安裝Lucene 前需要進(jìn)行Java 使用環(huán)境的基本配置,以便確保在某個平臺下能夠運(yùn)行Java 源代碼。在Java 環(huán)境變量的Classpath中添加Lucene 的位置,比如:“D:java Lucene-1.4-finalLuncene-1.4-final.jar;”。也可以直接將Lucene-1.4-final.jar 文件放到WEBINFclasses 目錄下。
中文分詞是指將一個連續(xù)序列的中文語句切分成單獨(dú)的多個詞。對于一段用戶輸入的中文,如果能夠正確的將其切分為詞,計算機(jī)就可以準(zhǔn)確識別其語句含義,這就是分詞算法。現(xiàn)有的分詞算法可分為三大類:基于統(tǒng)計的分詞方法、基于理解的分詞方法以及基于字符串的分詞方法。對于搜索引擎來說,中文分詞是否準(zhǔn)確,常常直接影響到對搜索結(jié)果的相關(guān)度排序,也會導(dǎo)致最終返回的結(jié)果不同。中文分詞技術(shù)之所以會廣泛應(yīng)用在搜索引擎中是因其語法上的特殊性,以英文為代表的拉丁語系可以使用空格作為分隔符,將句子自然分割為相關(guān)單詞,而中文語句中詞語之間缺少分隔符,它的切分非常復(fù)雜,由于在現(xiàn)代漢語中通常是以詞語作為基本表達(dá)單元居多,不再使用單獨(dú)字表達(dá)相關(guān)含義。例如:“計算機(jī)技術(shù)”,基本語義單元為“計算機(jī)”和“技術(shù)”,如果按單字切分為“計”、“算”、“機(jī)”、“技”、“術(shù)”,則這些單字無法表達(dá)中文含義,因此不符合需求。
JSP 全稱Java Server Pages,是一種動態(tài)網(wǎng)頁開發(fā)技術(shù),主要用于實(shí)現(xiàn)Java web 應(yīng)用程序的用戶界面部分。在企業(yè)開發(fā)中,前端工程師(美工)負(fù)責(zé)前端的頁面(html 文件)相關(guān)設(shè)計和美化工作,后臺的Java 代碼由Java 程序開發(fā)人員完成,要使前端和后臺相結(jié)合完成網(wǎng)頁正常運(yùn)行,后臺開發(fā)人員需要在Servlet 中使用response獲取輸出流,與前端頁面鏈接,如此會使得系統(tǒng)中的Java 代碼十分繁瑣,而且不利于前端工程師維護(hù)頁面。因此sun 公司開發(fā)出JSP 來解決這一問題,開發(fā)人員可以直接在JSP 文件中書寫HTML代碼、XHTML 代碼、XML 元素以及嵌入JSP 操作和命令,最后由Java 對應(yīng)的機(jī)制將其翻譯成相應(yīng)的Java 代碼,這樣前端工程師就可以直接在JSP 文件中對頁面進(jìn)行設(shè)計和修改,后臺開發(fā)人員也可以在JSP 頁面中添加后臺程序。
超文本傳輸協(xié)議(Hypertext Transfer Protocol, HTTP)是Web的基礎(chǔ)協(xié)議。超文本傳輸協(xié)議是用于從萬維網(wǎng)服務(wù)器上傳輸超文本到本地瀏覽器,是一種簡單的請求—響應(yīng)協(xié)議,它保證計算機(jī)能夠正確快速地傳輸超文本文檔,還能指定客戶端可以向服務(wù)器端發(fā)送哪些消息、將收到什么響應(yīng)以及所發(fā)送文檔中的哪部分內(nèi)容首先顯示。由于目前互聯(lián)網(wǎng)中使用最為廣泛的協(xié)議就是超文本傳輸協(xié)議HTTP,因此所有的WWW 文件都遵守這個標(biāo)準(zhǔn)。
數(shù)據(jù)庫是建立在計算機(jī)存儲設(shè)備上的一種“倉庫”,用于組織、存儲和管理各類數(shù)據(jù),數(shù)據(jù)可按照一定的數(shù)據(jù)模型來存儲,用戶可對“倉庫”中的數(shù)據(jù)進(jìn)行新增、修改、刪除和查詢等操作。數(shù)據(jù)庫中的數(shù)據(jù)可為多用戶共享使用,即多個用戶可以同時存取數(shù)據(jù)庫中的同一個數(shù)據(jù),而不受具體程序的限制,這不僅滿足了用戶對信息內(nèi)容的要求,同時也滿足了各用戶之間信息通信的需求。關(guān)系型數(shù)據(jù)庫是建立在關(guān)系模型基礎(chǔ)上的數(shù)據(jù)庫,它使用二維表格來存儲大量數(shù)據(jù),本系統(tǒng)所研究的搜索引擎后臺是由MySQL 實(shí)現(xiàn),MySQL是比較受歡迎的關(guān)系型數(shù)據(jù)庫管理系統(tǒng),可移植于各種流行的操作系統(tǒng)平臺,由于Mysql 是開源的,它支持大型的數(shù)據(jù)庫,使用標(biāo)準(zhǔn)的SQL數(shù)據(jù)語言形式,因此,MySQL數(shù)據(jù)庫應(yīng)用在大多數(shù)的系統(tǒng)中,用于后臺數(shù)據(jù)的存儲以及操作。
全文搜索引擎可分為四個部分,分別是搜索器、索引器、檢索器和用戶界面。它的工作過程是:首先搜索器在互聯(lián)網(wǎng)中進(jìn)行搜索,發(fā)現(xiàn)和搜集網(wǎng)頁信息;接下來索引器對搜索器搜索到的信息進(jìn)行一系列的解析、整理后,提取出關(guān)鍵信息并建立索引項,存儲于索引數(shù)據(jù)庫中;最后檢索器會根據(jù)用戶在用戶界面輸入的查詢關(guān)鍵字,在索引數(shù)據(jù)庫中快速檢索文檔,找到與查詢請求相匹配的文檔信息,然后將查詢結(jié)果按相關(guān)度排序顯示給用戶;用戶接口主要用于和用戶交互,用戶進(jìn)入搜索界面,在文本框中輸入想要查詢的關(guān)鍵字,點(diǎn)擊“搜索”,系統(tǒng)根據(jù)用戶的查詢請求,查詢索引表與數(shù)據(jù)庫,產(chǎn)生查詢結(jié)果并按照一定的格式輸出顯示給用戶。本文所研究的全文搜索引擎系統(tǒng)應(yīng)具備以下功能:
在互聯(lián)網(wǎng)中,URL 是每個網(wǎng)頁的入口地址,搜索引擎所采用的蜘蛛程序通過URL 來抓取網(wǎng)站頁面,然后從該頁面提取新的URL存儲到原始URL 列表中,最后將該原始頁面存儲到搜索引擎索引庫。
對于抓取到的網(wǎng)頁信息,搜索引擎還需要做一些前期預(yù)處理工作,首先是從網(wǎng)頁信息中提取出關(guān)鍵詞,這是最重要的一步,需要去除重復(fù)的網(wǎng)頁信息,使用中文分詞技術(shù)提取關(guān)鍵信息,判斷網(wǎng)頁類型,分析超鏈接,計算網(wǎng)頁的重要度和豐富度等,這些都為后期用戶檢索關(guān)鍵字以及按照相關(guān)度排序顯示查詢結(jié)果提供重要依據(jù)。
在用戶界面,當(dāng)用戶輸入關(guān)鍵詞,點(diǎn)擊“搜索”按鈕后,搜索引擎會從后臺索引數(shù)據(jù)庫中查找信息,最后將結(jié)果輸出顯示給用戶。為了使用戶能快速找到有用的網(wǎng)頁信息,除了網(wǎng)頁的URL 和標(biāo)題外,還會提供一段來自該網(wǎng)頁信息的摘要。
本系統(tǒng)在性能上應(yīng)注意以下幾點(diǎn):
(1)為了提高多用戶檢索時的檢索效率,系統(tǒng)應(yīng)采用優(yōu)化后的檢索策略和多線程并發(fā)檢索機(jī)制;
(2)系統(tǒng)應(yīng)具有高安全性,應(yīng)提供數(shù)據(jù)庫級、記錄級與字段級安全保護(hù)措施。
根據(jù)全文搜索引擎的需求分析,本系統(tǒng)應(yīng)包含以下模塊:預(yù)處理功能,數(shù)據(jù)庫連接池部分,Web 框架與用戶界面的設(shè)計。這些不同功能的模塊在模擬搜索引擎中起著不同的作用,通過它們之間的相互配合、相互補(bǔ)充以實(shí)現(xiàn)搜索的目的。
為方便用戶使用,將用戶操作界面分為瀏覽器界面、J2ME 既模擬手機(jī)窗口界面,提供給用戶方便、美觀、實(shí)用的接口界面。爬取功能負(fù)責(zé)采集數(shù)據(jù),預(yù)處理部分負(fù)責(zé)將數(shù)據(jù)庫字典一次性加載到內(nèi)存中。數(shù)據(jù)庫連接池部分負(fù)責(zé)創(chuàng)建連接池信息,以滿足多用戶使用,多程序同時進(jìn)行。
系統(tǒng)的客戶端界面采用Jsp 技術(shù),保證用戶界面美觀大方,方便操作,另外在頁面的布局和顯示效果方面也應(yīng)合理設(shè)計,使其在性能上更加優(yōu)越,沒有操作的盲區(qū)或者明顯的不合理的地方。
4.1.1 界面的顯示問題
頁面高度、寬度合適,配色美觀,內(nèi)容位置布局合理,文字大小、顏色適當(dāng)。隨著瀏覽器,分辨率的變化,瀏覽器顯示區(qū)域的高度和分辨率顯示的高度的不同,一個頁面不夠顯示的內(nèi)容可用下拉滾動條設(shè)置。列表頁面可以采用表格形式展示,可以根據(jù)喜好來選擇每頁顯示多少條信息,列表項較多時可分頁顯示。
4.1.2 頁面布局問題
頁面可采用div 塊來設(shè)計,整個頁面可分為top、middle、left、right、bottom 以及footer 等部分,每部分放置不同的內(nèi)容,這種方式結(jié)構(gòu)清晰,代碼簡單,便于對整個頁面布局,后期維護(hù)方便。
用戶界面主要用于和用戶交互,包括響應(yīng)用戶的查詢檢索和記錄用戶的行為。用戶界面需要獲取用戶的查詢請求,提交給系統(tǒng),查詢索引表與數(shù)據(jù)庫,產(chǎn)生結(jié)果并按照一定的格式輸出顯示給用戶,以及記錄日志(包括用戶查詢短語和查詢時間等信息)等。
在Eclipse 服務(wù)器端運(yùn)行之后, 打開瀏覽器輸入http://127.0.0.1:8080/telServer,進(jìn)入搜索初始界面,在文本框中輸入想要查詢的關(guān)鍵字。點(diǎn)擊“搜索”。根據(jù)用戶輸入的查詢關(guān)鍵字進(jìn)行搜索得出結(jié)果。搜索前應(yīng)對用戶輸入的短語進(jìn)行分詞處理,以此結(jié)果作為搜索關(guān)鍵字到索引表中進(jìn)行查詢。按照系統(tǒng)查詢返回的結(jié)果,根據(jù)動態(tài)網(wǎng)頁生成技術(shù),按照一定的模版形成結(jié)果頁面輸出給用戶。
系統(tǒng)的服務(wù)器部分主要包括兩個部分:創(chuàng)建索引和搜索模塊。
創(chuàng)建索引模塊:該部分是整個系統(tǒng)的核心,包括了解析文檔和為文檔建立索引。索引的格式獨(dú)立于運(yùn)行平臺,創(chuàng)建的獨(dú)立索引塊會加速創(chuàng)建索引的速度,為所有文檔建立索引也是最終能否搜索出目標(biāo)文檔的關(guān)鍵,從而為下一步搜索做好準(zhǔn)備。
搜索模塊:該模塊的實(shí)現(xiàn)搜索功能,負(fù)責(zé)為界面模塊提供文檔地址,從而通過界面向用戶展示搜索結(jié)果。
本系統(tǒng)采用的是B/S(Browser/Server)架構(gòu),也就是瀏覽器和服務(wù)器架構(gòu)模式,這種模式是由早期的C/S(客戶機(jī)/服務(wù)器)模式改進(jìn)演變后的結(jié)構(gòu)。在B/S 架構(gòu)下,用戶只需安裝Web 瀏覽器,打開搜索主頁,即可完成搜索功能。這種模式下,前端需要處理的事務(wù)非常少,大部分是數(shù)據(jù)渲染工作,后臺也就是服務(wù)器端需要處理大量的事務(wù)邏輯。在后期維護(hù)和升級時,管理員也只需要在服務(wù)器端操作即可,所有的客戶端只是瀏覽器,不需要任何操作,這樣就大大簡化了客戶端計算機(jī)的工作負(fù)載,減輕了系統(tǒng)維護(hù)與升級的成本和工作量。用戶在使用系統(tǒng)時,僅僅需要一個瀏覽器就可運(yùn)行全部的模塊,真正達(dá)到了“零客戶端”的功能,很容易在運(yùn)行時自動升級。
隨著互聯(lián)網(wǎng)迅速發(fā)展至今,搜索引擎經(jīng)歷了30年的發(fā)展壯大,帶給用戶非常便利的體驗(yàn)。巨大的互聯(lián)網(wǎng)每時每刻都在產(chǎn)生著大量的信息,正因?yàn)樗阉饕娴某霈F(xiàn),才讓我們在浩瀚的信息海洋中找到了我們的目標(biāo)??萍荚诓粩噙M(jìn)步,未來的搜索引擎朝著社會化、實(shí)時化、可移動性、個性化方向不斷發(fā)展,同時跨語言的搜索,基于圖片、視頻、音頻的搜索也是我們不斷研究的方向。