基于Web搜索引擎的設(shè)計(jì)與實(shí)現(xiàn)
時(shí)間:2023-03-20 09:26:02 | 來源:電子商務(wù)
時(shí)間:2023-03-20 09:26:02 來源:電子商務(wù)
摘 要
我們處在一個(gè)大數(shù)據(jù)的時(shí)代,伴隨著網(wǎng)絡(luò)信息資源的龐大,人們?cè)絹碓蕉嗟刈⒅卦鯓硬拍芸焖儆行У貜暮A康木W(wǎng)絡(luò)信息中,檢索出自己需要的、潛在的、有價(jià)值的信息,從而可以有效地在日常工作和生活中發(fā)揮作用。因?yàn)樗阉饕孢@一技術(shù)很好的解決了用戶搜索網(wǎng)上大量信息的難題,所以在當(dāng)今的社會(huì),無論是發(fā)展迅猛的計(jì)算機(jī)行業(yè),還是作為后起之秀的信息產(chǎn)業(yè)界,都把Web搜索引擎的技術(shù)作為了爭(zhēng)相探討與專研的方向。
搜索引擎的定義就是指按照既定的策略與方法,采取相關(guān)的計(jì)算機(jī)程序,通過在互聯(lián)網(wǎng)中進(jìn)行尋找信息,并顯示信息,最后把找到的信息進(jìn)行整理和篩選,為搜索引擎的使用者提供檢索信息的服務(wù),終極目標(biāo)是為了提供給使用者,他所搜索信息相關(guān)的資料的計(jì)算機(jī)系統(tǒng)。搜索引擎的種類繁多,既可以進(jìn)行全文的索引,還可以進(jìn)行目錄的索引,不僅有集合式的搜索引擎,還有垂直搜索的引擎以及元搜索引擎。除此之外,還有門戶搜索引擎和免費(fèi)鏈接列表等等。
本文首先介紹了搜索引擎出現(xiàn)的必要性,以及什么是搜索引擎、搜索引擎的分類、處理流程、核心技術(shù),同時(shí)也對(duì)如何才能提高搜索引擎的精準(zhǔn)度以及關(guān)聯(lián)度進(jìn)行了更加深入的研究。
關(guān)鍵詞:Web搜索引擎;信息檢索;人機(jī)交互;Lucene全文檢索引擎
Abstract
We are in an era of big data, with the network information resources is huge, more and more people pay attention to how to quickly and efficiently from the massive network information, searching for their own needs, potential, valuable information, which can effectively play a role in the daily work and life. Because the search the engine of this technology is a good solution to the problem of Internet users to search a large amount of information, so in today’s society, whether it is the rapid development of computer industry, information industry as the bright younger generation, the Web search engine technology as the direction to explore and research.
The search engine (Search Engine) refers to the strategy and methods established, take computer related procedures, through the Internet search and display information, then the information sorting and filtering, provide information retrieval services for users of search engines, the ultimate goal is to provide to the user, the computer system of his search data information related to the type of search engine. There can be the index, can also be a directory index, not only has the integrated search engine, and the vertical search engine and meta search engine. In addition, there is the portal search engine and free chain Access list and so on.
This paper first introduces the necessity of the search engine, and what is the search engine, search engine classification, treatment process, the core technology, but also on how to improve the search accuracy and relevance of a more in-depth study.
Keywords: Web search engine; information retrieval; human-computer interaction; Lucene full text search engine
1 緒論
1.1 項(xiàng)目背景
環(huán)球信息網(wǎng)(World Wide Web),即3W,一般在計(jì)算機(jī)與信息行業(yè)用Web這個(gè)詞匯來來表示,萬維網(wǎng)是它進(jìn)入中國(guó)時(shí)所賦予的稱呼,其實(shí),這就是一個(gè)資料的匯集與存儲(chǔ)的空間。
在這個(gè)空間中,以事物為單位,一個(gè)事物也可以稱為一樣“資源”,利用URL來標(biāo)識(shí),統(tǒng)一資源標(biāo)識(shí)符”(URL。這些資源通過超文本傳輸協(xié)議(Hypertext Transfer Protocol,HTP)傳送給終端用戶,其中給到用戶手上的是一個(gè)個(gè)鏈接,然后用戶通過逐層點(diǎn)擊鏈接,就可以查看到資源,也可以獲得到資源。
萬維網(wǎng)也常常被人們誤以為是因特網(wǎng)的近義詞,在這里必須要表明的概念是:萬維網(wǎng)與因特網(wǎng)存在著本質(zhì)的區(qū)別。因特網(wǎng)(Internet)是指,把全世界所有的各類型電腦,利用網(wǎng)絡(luò)連接,所形成的硬件框架,這是一個(gè)實(shí)實(shí)在在的“網(wǎng)”。萬維網(wǎng),其本質(zhì)是一種功能,即讓使用者光看網(wǎng)絡(luò)頁面,而頁面之間又交相輝映,從而讓使用者覺得這也是一種“網(wǎng)”,但這種網(wǎng)是虛擬的,是不存在的。
可以說1994年在信息時(shí)代是一個(gè)重大突破的一年,因?yàn)槿f維網(wǎng)(World Wide Web)出現(xiàn)了。在這一改變之前,人們的信息獲取方式還是通過各種傳統(tǒng)文化傳媒,相對(duì)于萬維網(wǎng)來說是很傳統(tǒng)、笨拙的,它在開放性和廣泛的可訪問性極大的激勵(lì)了人們創(chuàng)作的積極性。所以萬維網(wǎng)的出現(xiàn)極大的縮短了人們信息獲取的時(shí)間,同時(shí)信息的時(shí)效性也得到了保障。萬維網(wǎng)一出現(xiàn)就收到了全世界各國(guó)人的追捧,人們?cè)谒霈F(xiàn)的十幾年的一個(gè)時(shí)間段中,就在萬維網(wǎng)這一平臺(tái)上發(fā)布了幾十億條的網(wǎng)頁信息,他的一個(gè)數(shù)據(jù)量是那么的龐大,粗略計(jì)算一下,萬維網(wǎng)上的網(wǎng)頁信息每天都會(huì)不斷增長(zhǎng)幾十萬。因?yàn)榫W(wǎng)絡(luò)化、數(shù)字化的信息資源,所以網(wǎng)絡(luò)信息也是有利有弊:利的一面是提高了我們的信息量;不利的一面是龐大的信息一并向我們開來,猶如破堤的江水,洶涌澎湃,造成了我們無所適從。
關(guān)于搜索引擎的由來,北美加拿大(Canada)的麥吉爾大學(xué)就必須要介紹一下了,早在上世紀(jì),90年代之初,由于網(wǎng)絡(luò)資源眾多,分散性特別大,人們?cè)谡屹Y料的時(shí)候特別費(fèi)力。麥吉爾大學(xué)的團(tuán)隊(duì)也意識(shí)到了這個(gè)問題,所以他們就研發(fā)出了Archie,這是一個(gè)可以自動(dòng)運(yùn)行的系統(tǒng),可以完成在FTP上搜集有用資源的作用。該系統(tǒng)定期會(huì)自動(dòng)搜索FTP系統(tǒng)上保存的文檔名以及相關(guān)的資源,而且還可以自行分析,如果有客戶端發(fā)出搜索請(qǐng)求,該系統(tǒng)會(huì)根據(jù)搜索請(qǐng)求的內(nèi)容,自動(dòng)提供保存在主機(jī)中文件。在以Web網(wǎng)頁為對(duì)象的搜索引擎系統(tǒng)的大背景下,搜索引擎被人們當(dāng)做了在網(wǎng)上查找信息的重要手段,通過搜索引擎系統(tǒng)人們可以在浩瀚的網(wǎng)絡(luò)海洋中第一時(shí)間找到自己真正想要的信息,并且搜索引擎的智能以及現(xiàn)在網(wǎng)頁的特性使得人們只要輸入相關(guān)的詞語(即關(guān)鍵詞)就可以找到相關(guān)的信息。
現(xiàn)如今,人們看到的百度、Google取得的顯著成效,可以說是成為了行業(yè)的領(lǐng)頭羊,所以整個(gè)世界也都把視覺一部分放置在了搜索引擎這一領(lǐng)域當(dāng)中,各種各樣的搜索服務(wù)猶如雨后春筍一般爭(zhēng)相冒出。搜索引擎不僅種類愈來愈多,而且其服務(wù)的質(zhì)量也越來越全面,從最初期的國(guó)外的Google引擎、Yahoo引擎,到如今的中國(guó)的Baidu引擎、360引擎等等。隨著web技術(shù)的不斷完善,網(wǎng)絡(luò)信息資源也是翻倍增長(zhǎng)的(變化關(guān)系是成正比的)。所以為了滿足用戶的需要,既可以快速的找到到資源,而且還可以提高資源的質(zhì)量,各類型的引擎中,必須引入檢索這一概念。此外,在企業(yè)級(jí)應(yīng)用的市場(chǎng)上,由于搜索的資源需求量大,要求的精度更加高,全文檢索的功能也就被人們重視起來了,例如在各種文件檔案的處理過程中、企業(yè)管理的軟件中。
在這樣的環(huán)境下,搜索引擎的技術(shù)也在迅猛發(fā)展。各種討論搜索引擎的文章、博客、雜志等席卷網(wǎng)絡(luò)的相關(guān)信息。在這個(gè)信息化全面進(jìn)入人們生活各層各面的時(shí)代,搜索引擎這項(xiàng)技術(shù)無疑會(huì)在最熱門的技術(shù)中占有一席之地。
1.2 國(guó)內(nèi)外發(fā)展現(xiàn)狀及分類
當(dāng)今的時(shí)代,網(wǎng)絡(luò)信息呈現(xiàn)指數(shù)型上升,其復(fù)雜性不言而喻,而網(wǎng)絡(luò)檢索技術(shù)的發(fā)展卻不盡如人意,有很多方面的不足,具體闡述如下:
- 隨著網(wǎng)頁數(shù)量的迅猛增加,盡管是專業(yè)人員,他對(duì)所有的認(rèn)知也存在不足,同時(shí)專業(yè)人員的工作量也很大,單憑人工操作,是沒有辦法對(duì)如此龐大的信息量進(jìn)行有效的分類,更不用說是再加以檢索和利用了。網(wǎng)絡(luò)用戶接觸的是龐大對(duì)的、未經(jīng)組織的信息,只是使用簡(jiǎn)單的關(guān)鍵詞搜索,它對(duì)應(yīng)的反饋給用戶的結(jié)果冗余度較大且涵蓋有限,這是讓用戶無法接受的
- 信息實(shí)用性評(píng)價(jià)低迷。有些網(wǎng)站在網(wǎng)頁中高頻的出現(xiàn)某些關(guān)鍵字,從而輕易的被一些顯著的搜索引擎收錄,以此來提高該網(wǎng)站的知名度,但實(shí)際上它對(duì)用戶是沒有提供任何有價(jià)值的信息
- 網(wǎng)絡(luò)信息變更過快。如今的社會(huì)就是一個(gè)快節(jié)奏的社會(huì),人們更多的喜歡是速食文化,即盡可能快的獲取信息,可是分布式的信息布局,就算網(wǎng)絡(luò)傳輸速度再快,要想實(shí)現(xiàn)實(shí)時(shí)的搜索難度堪比登天啊,即使是上一秒刷新過的網(wǎng)頁,在下一秒就會(huì)有無盡的可能,時(shí)效性一直是人們追求網(wǎng)絡(luò)信息的方向,但卻很難做到真正的實(shí)時(shí)
速度和效率往往是會(huì)體現(xiàn)這個(gè)搜索引擎是否良好的標(biāo)準(zhǔn),故此,對(duì)于網(wǎng)絡(luò)信息檢索工具而言,其發(fā)展的主要方向就是,在信息檢索的速度和效率是一步一步不斷改進(jìn)和突破,以提高檢索的技術(shù),提供更高的檢索服務(wù)的質(zhì)量,改善甚至消除局部網(wǎng)絡(luò)信息檢索的用戶不滿意之處。
萬維網(wǎng):它是世界上最大的域名注冊(cè)以及虛擬主機(jī)提供商,現(xiàn)在的域名多種多樣,不過以www開頭的最多,相應(yīng)的費(fèi)用也是最貴的,但是,現(xiàn)在還有一批域名不是以www開頭,直接二級(jí)域名開頭,我們?cè)谧鼍W(wǎng)站的時(shí)候,首先需要購買域名,然后大約根據(jù)程序的大小訂購服務(wù)器,服務(wù)器按系統(tǒng)分為linux、window的,按開發(fā)語言也可以選擇服務(wù)器,按代碼的上傳方式也可以選擇服務(wù)器,服務(wù)器有一定的界面,當(dāng)然你也可以在linux系統(tǒng)中敲指令來實(shí)現(xiàn),window服務(wù)器使用起來比較麻煩,因?yàn)槟愕碾娔X是window的,然后你要進(jìn)入另外一臺(tái)主機(jī)中,就會(huì)出現(xiàn)只能選擇其一的現(xiàn)象,不能同時(shí)看到,接著建立站點(diǎn),設(shè)置 ftp,建立數(shù)據(jù)庫,然后上傳代碼。
1.3 本論文組織結(jié)構(gòu)介紹
本次設(shè)計(jì)是在Lucene技術(shù)之上進(jìn)行的開發(fā),最終成功的設(shè)計(jì)出搜索引擎的全過程。從開始本次設(shè)計(jì)到最終的實(shí)現(xiàn),都會(huì)在下述做詳細(xì)的介紹:
- 第1章緒論,本章主要從如下幾個(gè)方面做了闡述:
- 本次設(shè)計(jì)的系統(tǒng)所會(huì)面臨的問題
- 怎么處理所面臨的難題
- 攻克難題的詳細(xì)內(nèi)容
- 本次課題是基于什么樣的研究背景、意義而進(jìn)行
- 本次設(shè)計(jì)的可行性分析以及論文中各章節(jié)內(nèi)容描述
- 第2章相關(guān)技術(shù)介紹,對(duì)涉及到的理論知識(shí)和用到的開發(fā)工具做相關(guān)闡述
- 第3章搜索引擎的基本原理,詳細(xì)介紹了搜索引擎的基本組成結(jié)構(gòu)和工作原理
- 第4章搜索引擎系統(tǒng)的分析與設(shè)計(jì),根據(jù)所需要實(shí)現(xiàn)的功能入手,一步步的完成設(shè)計(jì)目標(biāo)
- 第5章搜索引擎系統(tǒng)的具體設(shè)計(jì)步驟,分步驟詳細(xì)地表述了該設(shè)計(jì)的實(shí)現(xiàn)過程以及設(shè)計(jì)中會(huì)遇到的注意事項(xiàng)
- 第6章系統(tǒng)測(cè)試,對(duì)系統(tǒng)做了相關(guān)測(cè)試和評(píng)價(jià)說明
- 最后總結(jié)、致謝、參考文獻(xiàn)
2 相關(guān)技術(shù)介紹
2.1 什么是搜索引擎
隨著Web信息的爆炸型增長(zhǎng),Web型搜索引擎的設(shè)計(jì)就被提上了日程,大約是從上世紀(jì)90年代開始,逐漸的逐漸發(fā)展起來。實(shí)際上,本次設(shè)計(jì)的就是一種在互聯(lián)網(wǎng)上,專門給用戶提供各種查詢信息服務(wù)的網(wǎng)站,它以自己特定的方式在互聯(lián)網(wǎng)中尋找信息,并且把信息提取出來,然后再進(jìn)行理解信息,把信息重新組織以及信息的加工處理,并反饋給用戶的服務(wù),從而達(dá)到信息資源導(dǎo)航的目的。用戶可以通過自由詞、關(guān)鍵字、等方式進(jìn)行查詢,也可以利用全文進(jìn)行檢索,或者根據(jù)類別進(jìn)行搜索,甚至還可以加入一些特有的信息進(jìn)行限制,例如名字、性別、出版社、序列號(hào)等等。
如今搜索引擎提供的信息資源導(dǎo)航服務(wù)已發(fā)展成互聯(lián)網(wǎng)上非常重要的網(wǎng)絡(luò)服務(wù)之一,搜索引擎網(wǎng)站也被稱之為 “網(wǎng)絡(luò)門戶”。
根據(jù)搜集資源與提供給用戶的方式進(jìn)行區(qū)別,如今的搜索引擎可以劃分為兩類:
- 目錄式搜索引擎:按照人為地方案或者是半自動(dòng)的工作模式去搜索信息,然后指定職業(yè)的工作人員查看信息,采取人工的方式對(duì)信息進(jìn)行篩選,最終會(huì)把檢索到的信息分類存放在指定的框架當(dāng)中。這一類信息大多數(shù)是直接與網(wǎng)站進(jìn)行交互的,只可以提供文檔目錄的查看以及直接檢索的服務(wù)。由于這一類型的搜索引擎引入了人的智能的功能,所以提供的信息質(zhì)量非常高,精確地匹配所檢索的信息;但由于需要指定人員進(jìn)行查看和分類,這無疑會(huì)使得信息的更新不夠及時(shí),而且信息量如此之大,會(huì)使得維護(hù)任務(wù)異常繁重。雅虎(yahoo!)就是這一類型的典型代表
- 機(jī)器人搜索引擎:利用蜘蛛 (spider)程序在互聯(lián)網(wǎng)中進(jìn)行自主的檢索資源,通過索引器搜索的信息繪制索引表,索引器就是依照使用者的輸入請(qǐng)求,查看索引庫中的內(nèi)容,最終將匹配到的結(jié)果顯示出來,供用戶查看。這一類型的服務(wù)方式是面向web的全文檢索。該類搜索引擎相比于目錄式的搜索引擎,省去了人工操作的環(huán)節(jié),使得更新更加及時(shí),而且由于是計(jì)算機(jī)自動(dòng)進(jìn)行查詢,會(huì)使得查詢得到的信息量大幅提升;但正是由于這樣,會(huì)使得返回的信息匹配率相比于目錄式檢索會(huì)有所下降,用戶所看到的信息過于龐大,還需自身進(jìn)行篩選。由于其優(yōu)點(diǎn)突出,目前,比較流行的搜索引擎大多數(shù)采取了這一種方式,這其中代表性最強(qiáng)的引擎有: google(谷歌)、Baidu(百度)、360、等等
現(xiàn)在網(wǎng)絡(luò)的搜索引擎也已經(jīng)有不少,國(guó)際上比較著名的有Google(谷歌)等等。國(guó)內(nèi)目前也建立了很多的搜索引擎,比如:百度、360、搜狐、新浪等。其中,在信息檢索的準(zhǔn)確率和全面性這兩個(gè)指標(biāo)上,做得較好有Google、百度。 同時(shí)搜索引擎的準(zhǔn)確度及相關(guān)性還是有待科技人員進(jìn)一步提高和完善的。
以Google為例再具體的闡述一下,它可以在檢索信息時(shí)做到了快、準(zhǔn)、狠。它最厲害的優(yōu)勢(shì)在于:1、超大容量的web存儲(chǔ)空間。據(jù)保守估計(jì),Google目前收錄的Web網(wǎng)頁總量己經(jīng)高達(dá)80億。2、響應(yīng)速度及時(shí)。據(jù)數(shù)據(jù)顯示,Google(谷歌)通常搜尋所用時(shí)間大致上小于0.3 s,這么卓越的性能是基于數(shù)百臺(tái)高性能的硬件服務(wù)器以及谷歌公司所使用的的分布式并行查詢的系統(tǒng)。3、反饋信息全面。據(jù)了解,Google查詢反饋的信息不僅僅集中于各個(gè)大型熱門網(wǎng)站,同時(shí)針對(duì)的是更多的特定的Web頁面(即便是存放這些頁面的網(wǎng)站很冷門),但正是由于這樣,才會(huì)使得谷歌可以獲取的信息,能夠和使用者查找的請(qǐng)求具有較高的相關(guān)度、匹配性、準(zhǔn)確度,Google(谷歌)不斷發(fā)展改善的頁面優(yōu)先度程序和查詢到的信息最優(yōu)化的排序機(jī)制,使得谷歌能夠在搜索引擎中處于佼佼者的地位。
2.2 sqlserver數(shù)據(jù)庫
值得介紹的是,數(shù)據(jù)庫是由一個(gè)個(gè)基本的表組成的,這些表包括約束、規(guī)則、索引、觸發(fā)器、函數(shù)、默認(rèn)值等其他數(shù)據(jù)庫對(duì)象,同時(shí)這些數(shù)據(jù)庫對(duì)象都是依附于表對(duì)象而存在的。用自己的概括數(shù)據(jù)庫跟表的關(guān)系:數(shù)據(jù)庫是分母(無限大),表是分子(一個(gè)表對(duì)應(yīng)一個(gè)單位)。
本次設(shè)計(jì),我采用的是sqlserver數(shù)據(jù)庫,主要使用的是sqlserver 2008這款軟件,它的最大的優(yōu)勢(shì)在于:
- 可以很快捷的添加刪除修改數(shù)據(jù)
- 它的圖形化界面可以很快的建立表與表之間的聯(lián)系圖,一個(gè)表的外鍵關(guān)系可以很快地建立出來
- 有很強(qiáng)大的安全機(jī)制,有自己的導(dǎo)入導(dǎo)出格式,很安全
- 具有強(qiáng)大的功能,事務(wù)操作等等
它也存在的缺點(diǎn):在環(huán)境配置上要相較其他中小型的服務(wù)器要復(fù)雜一些,同時(shí)我們還知道sqlserver的語法跟mysql,orcale之間有一些像素也有一些不同,包括在轉(zhuǎn)化為mysql或者orcale時(shí)都是有些差異的。
2.3 Tomcat服務(wù)器
Tomcat是一個(gè)輕量級(jí)的應(yīng)用型服務(wù)器,它具有如下的優(yōu)點(diǎn):系統(tǒng)的擴(kuò)展性能優(yōu)越、服務(wù)器的性能非常穩(wěn)定、服務(wù)器的源碼開放,便于發(fā)燒友的研究與學(xué)習(xí)以及本身就帶有的免費(fèi)獲取的機(jī)制,這都是導(dǎo)致Java技術(shù)研究人員里有一大批忠于Tomcat的人員。這款服務(wù)器還是目前相當(dāng)流行的Web應(yīng)用服務(wù)器。
我們都知道,Tomcat既是Servlet容器,還是獨(dú)立的服務(wù)器,如果想要有動(dòng)態(tài)泰德效果,需要把動(dòng)態(tài)數(shù)據(jù)放在服務(wù)器上,基于java語言,Tomcat是一個(gè)容器,存放并且運(yùn)行基于servlet的java程序,像我們熟悉的三大框架都是你可以在Tomcat跑起來的,我們通常會(huì)把寫好的jsp的網(wǎng)站打包成一個(gè)壓縮文件,然后放到服務(wù)器上,在瀏覽器中輸入域名/網(wǎng)址就可以運(yùn)行起來了,就可以實(shí)現(xiàn)跟數(shù)據(jù)庫的連接,獲取到動(dòng)態(tài)數(shù)據(jù)。
3 搜索引擎的基本原理
3.1 搜索引擎的基本組成及其功能
由上圖可知,搜索引擎程序可以化分為搜索器子程序、索引器子程序、檢索器子程序以及用戶接口子程序等模塊;存儲(chǔ)器以及存儲(chǔ)桶是用來存儲(chǔ)所檢索到的各種資源的。
搜索引擎程序的組成結(jié)構(gòu)具體如下:
3.1.1 搜索器 (Crawler)
搜索器,顧名思義,就是用于在互聯(lián)網(wǎng)中探索、尋找信息,最終的目的是為了把信息存儲(chǔ)在存儲(chǔ)單元中的。這種計(jì)算機(jī)程序,需要日夜不停地處于運(yùn)行的狀態(tài),為的是可以盡可能的更快地搜集更多的新信息,這些信息的種類是多種多樣的,包括有HTML格式、XML格式、字處理文檔格式以及多媒體信息等等,此外搜索引擎還需要定期更新存儲(chǔ)器里的信息。
搜索器 | 即蜘蛛((Spider)程序,它無時(shí)無刻不在運(yùn)行,主要任務(wù)是從因特網(wǎng)上搜集各種的信息資源,然后通過壓縮處理等手段,使其占用空間變小,最終存到存儲(chǔ)庫里,為日候的用戶檢索做準(zhǔn)備。 |
---|
如今,互聯(lián)網(wǎng)已經(jīng)進(jìn)入了尋常百姓的家中,人們可以自由的發(fā)布信息,導(dǎo)致信息更新的很快,只有定時(shí)的更新網(wǎng)絡(luò)上的信息,才能避免使用者搜索信息時(shí)的死連接或者是無效連接。現(xiàn)在我們考慮的搜集信息的策略有兩種:
為了提高信息的發(fā)現(xiàn)以及信息的更新速度, 搜索器的實(shí)現(xiàn)方法通常會(huì)采用分布式、并行計(jì)算技術(shù),這樣就可以滿足商業(yè)搜索引擎每天幾百萬網(wǎng)頁的的信息發(fā)現(xiàn)了。
3.1.2 索引器(Indexer)
索引器,通過閱讀所搜集的信息,并進(jìn)行整理,將信息中的索引項(xiàng)生成索引表,同時(shí)還可以用索引項(xiàng)表示文檔。索引項(xiàng)有客觀索引項(xiàng)以及內(nèi)容索引項(xiàng)之分:
為了對(duì)文檔的內(nèi)容進(jìn)行區(qū)分,通常會(huì)給單索引項(xiàng)賦權(quán)值,這樣就可以用單索引項(xiàng)進(jìn)行區(qū)分了,而且還可以用來得出查詢結(jié)果與查詢目標(biāo)的相關(guān)度。一般使用的方法有:統(tǒng)計(jì)學(xué)方法、概率學(xué)方法以及信息論法。短語索引項(xiàng)的提取,一般會(huì)采用統(tǒng)計(jì)學(xué)的方法或者是概率學(xué)的方法甚至是語言學(xué)的方法。
索引表,一般會(huì)采用由索引項(xiàng)去查找相對(duì)應(yīng)文檔的內(nèi)容,這就是所謂的倒排表 (InversionList)。當(dāng)然,索引表還會(huì)把索引項(xiàng)在文檔中出現(xiàn)的位置也記錄在表,目的是為了計(jì)算索引項(xiàng)之間的關(guān)系,究竟是相鄰還是接近。
索引器的算法有兩種:集中式、分布式,每一種算法都有優(yōu)點(diǎn),但也都有其缺點(diǎn)。當(dāng)搜索的數(shù)據(jù)量巨大的時(shí)候,為了解決跟上信息量上升迅速的難題,必須采取即時(shí)索引 (InstantIndexing)的方式,一個(gè)漂亮的索引算法,隨著索引器的搜索的數(shù)據(jù)的提升,其性能的優(yōu)越性就會(huì)展露無遺。索引的質(zhì)量的高低,有時(shí)就會(huì)完全決定搜索引擎的有效性。
3.1.3 檢索器(Searcher)
依照用戶的查詢請(qǐng)求,搜索索引庫并快速的檢索出所需的文檔,然后比較所查到的文檔和查詢請(qǐng)求之間的相關(guān)度評(píng)價(jià)。最終,根據(jù)相關(guān)度的高低,將輸出的查詢結(jié)果進(jìn)行由高到低的排序,還可以實(shí)現(xiàn)用戶相關(guān)性與搜索引擎之間的反饋機(jī)制。
檢索器的設(shè)計(jì),目前已有四種成熟的模型:
- 混合的模型
- 代數(shù)的模型
- 以及概率模型
- 集合理論模型
3.1.4 用戶接口(UserInterface)
搜索引擎,目的是為了讓用戶進(jìn)行檢索信息,所以必須有用戶接口,這樣才能實(shí)現(xiàn)人機(jī)交互,從而才能真正的體現(xiàn)搜索引擎的價(jià)值。用戶接口就是用來進(jìn)行,將用戶的查詢請(qǐng)求輸入搜索引擎、顯示用戶的查詢結(jié)果、更高級(jí)的可以提供用戶相關(guān)性反饋機(jī)制,從而更好地實(shí)現(xiàn)搜索引擎,其所提供的信息的準(zhǔn)確性、合理性等等。 有了用戶接口,不僅方便了用戶使用搜索引擎,而且使得用戶可以更加的高效率、多方式地得到及時(shí)的信息。
用戶輸入接口我們可以分為兩類,一種是簡(jiǎn)單接口,另外一種就是與之對(duì)應(yīng)的復(fù)雜接口。
簡(jiǎn)單接口,就是最為平常的一種交互界面,使用者只能夠輸入查詢信息,不能進(jìn)行更加精確地查詢,而且也沒有反饋的功能;
復(fù)雜接口,不僅可以提供輸入查詢信息的文本框,而且使用者還可以對(duì)查詢得信息進(jìn)行限制,減小搜索空間,例如,使用邏輯運(yùn)算符、使用相近、相鄰的關(guān)系、域名的范圍(如.cn、.com)、出現(xiàn)的位置 (如題目、關(guān)鍵字、作者、時(shí)間)、搜索文檔的字?jǐn)?shù)等等。中國(guó)知網(wǎng)、萬方數(shù)據(jù)庫等等,都可以提供上述限制,由于不同的公司所用的限制方式不同,會(huì)給用戶的使用帶來一些不便,當(dāng)前就有一些公司與機(jī)構(gòu),正在著手制定查詢選項(xiàng)的一系列標(biāo)準(zhǔn)。
3.2 搜索引擎的詳細(xì)工作流程
搜索引擎的詳細(xì)軟件內(nèi)部構(gòu)成和具體工作流程說明如下:
搜索引擎的工作原理:當(dāng)我們?cè)谝粋€(gè)表單中輸入要搜索的內(nèi)容時(shí),搜索引擎就會(huì)根據(jù)我們輸入的內(nèi)容在數(shù)據(jù)庫中進(jìn)行搜索,首先他會(huì)匹配各個(gè)網(wǎng)頁中的頭部信息中的關(guān)鍵字,如果這個(gè)網(wǎng)站中有這個(gè)關(guān)鍵字的話,就會(huì)匹配出來;如果沒有的話,搜索引擎就會(huì)自動(dòng)過濾掉。簡(jiǎn)單直白的說,搜索引擎的工作原理就是對(duì)已存在的一個(gè)大型數(shù)據(jù)庫內(nèi)的信息資源進(jìn)行智能化的篩選過程,并將有效的結(jié)果反饋給用戶。
在這一個(gè)過程中無論是誰家的搜索引擎,無論是百度還是谷歌還是雅虎都會(huì)采用自己的算法根據(jù)一些指標(biāo)來進(jìn)行判斷,然后暗戰(zhàn)關(guān)聯(lián)度。高低從高到低排序。在這一過程中,需要我們?cè)谧鼍W(wǎng)站的時(shí)候頭部關(guān)鍵字部分還有超鏈接部分
還有在做完網(wǎng)站之后會(huì)引入一個(gè)文件以便收錄,結(jié)合一些SEO技術(shù),一個(gè)成功的網(wǎng)站是會(huì)在排名前五,而且通過一些合理的頁面布局,利用不同的工具,還有超鏈接的設(shè)置要合理,避免垃圾鏈接無用鏈接。通過讓搜索引擎爬你的網(wǎng)站,從而增加網(wǎng)站的流量,為各大站長(zhǎng)帶來收益。
我們通常會(huì)用好多指令查看某一個(gè)網(wǎng)站的瀏覽人數(shù),但是對(duì)于每一個(gè)搜索引擎又各有各的算法,在百度適用的不一定在谷歌適用。典型的我們會(huì)通過查看看 site://
http://www.xxx.com 類型的網(wǎng)站,來了解某一個(gè)網(wǎng)站的瀏覽人數(shù)。
4 系統(tǒng)分析與設(shè)計(jì)
4.1 系統(tǒng)分析
經(jīng)過對(duì)搜索引擎的研究同時(shí)與Lucene自身的特性相結(jié)合,將本次設(shè)計(jì)所需要實(shí)現(xiàn)的功能闡述如下:
- 支持桌面文件搜索,格式包括txt、doc、xls和ppt
- 支持分詞查詢
- 支持全文搜索
- 能夠高亮顯示搜索關(guān)鍵字
- 顯示查詢所用的時(shí)間
- 顯示搜索歷史、過濾關(guān)鍵字
分詞查詢與全文搜索這兩項(xiàng)功能,我們都可以利用Lucene本身自帶的庫加上相關(guān)算法就可以完成設(shè)計(jì)了,為了使得關(guān)鍵字的高亮度這一問題得到解決,顯然,我們需要利用Highlighter的輔助,通過數(shù)據(jù)庫持久化保存數(shù)據(jù)。
4.2 系統(tǒng)概要設(shè)計(jì)
在我們進(jìn)行需求分析的時(shí)候,制定的用例以及領(lǐng)域模型都可以直接的帶入到設(shè)計(jì)階段,我們粗略設(shè)計(jì)的搜索引擎系統(tǒng)的構(gòu)架如下:
4.2 系統(tǒng)實(shí)現(xiàn)目標(biāo)
希望實(shí)現(xiàn)一個(gè)可用于海量信息快速搜索的個(gè)性化引擎,它應(yīng)該具有快速、便捷和精確等特性,并且能夠一目了然而看到搜索耗時(shí),關(guān)鍵字高亮度顯示等等個(gè)性化效果。實(shí)現(xiàn)時(shí)希望不需要高配置的硬件資源以及復(fù)雜的環(huán)境配置或搭建,幸運(yùn)的是開源Lucene庫給我們提供了可能。
5 系統(tǒng)詳細(xì)實(shí)現(xiàn)
5.1 實(shí)現(xiàn)環(huán)境配置
因?yàn)槲宜x擇的搜索引擎是基于Lucene的,所以需要利用Lucene的一些jar包,這樣才能借助Lucene完成我們自己想要的搜索功能,并且為了實(shí)現(xiàn)分詞,我們還需要引用分詞組件的相關(guān)類庫,具體的引用類庫如圖5-1所示:
5.2 功能實(shí)現(xiàn)
5.2.1 建立索引
Lucene對(duì)數(shù)據(jù)的檢索是在索引文件中查找的,可能會(huì)有人問為什么不直接在數(shù)據(jù)中檢索呢?一個(gè)是數(shù)據(jù)庫檢索要實(shí)現(xiàn)全文檢索,實(shí)現(xiàn)分詞是相當(dāng)困難的,而且,如果數(shù)據(jù)量小只有幾百幾千倒是可以考慮用數(shù)據(jù)庫檢索。把數(shù)據(jù)從數(shù)據(jù)庫里讀取出來,寫入索引文件的時(shí)候是一條一條記錄的寫入的。
由于Lucene只能替文本這一類型的數(shù)據(jù)組建索引,所以為了進(jìn)行其他類型的數(shù)據(jù)進(jìn)行檢索,只能把其他的格式的數(shù)據(jù)用文本類型的替換,這樣就可以進(jìn)行索引、搜索了。如果需要對(duì)HTML文檔進(jìn)行索引的話,你就首先需要利用文本格式把 HTML文檔替換,隨后才可以將轉(zhuǎn)化的結(jié)果輸入 Lucene進(jìn)行索引與檢索,接著就會(huì)創(chuàng)建一份索引文件,我們需要把它保存到存儲(chǔ)器里面,最終通過判斷用戶在UI界面輸入的查詢請(qǐng)求,從建立好的索引文件中查找。
實(shí)現(xiàn)代碼:
/**
* 為數(shù)據(jù)庫檢索數(shù)據(jù)創(chuàng)建索引
* @param rs
* @throws Exception
*/
private
void createIndex(ResultSet rs)
throws
Exception
{
Directory directory =
null;
IndexWriter indexWriter =
null;
try
{
indexFile =
new
File(searchDir);
if(!indexFile.exists())
{
indexFile.mkdir();
}
directory =
FSDirectory.open(indexFile);
analyzer =
new
IKAnalyzer();
indexWriter =
new
IndexWriter(directory, analyzer,
true,
IndexWriter.MaxFieldLength.UNLIMITED);
indexWriter.setMaxBufferedDocs(maxBufferedDocs);
Document doc =
null;
while(rs.next())
{
doc =
new
Document();
Field id =
new
Field("id",
String.valueOf(rs.getInt("id")),
Field.Store.YES,
Field.Index.NOT_ANALYZED,
TermVector.NO);
// Field title = new Field("title", rs.getString("title") == null ? "" : rs.getString("title"), Field.Store.YES,Field.Index.ANALYZED, TermVector.NO);
Field content =
new
Field("content", rs.getString("content")
==
null
?
""
: rs.getString("content"),
Field.Store.YES,Field.Index.ANALYZED,
TermVector.NO);
doc.add(id);
doc.add(content);
indexWriter.addDocument(doc);
}
indexWriter.optimize();
indexWriter.close();
}
catch(Exception e)
{
e.printStackTrace();
}
}
5.2.2 文件搜索實(shí)現(xiàn)
文件搜索首先需在設(shè)置系統(tǒng)一個(gè)搜索文件夾,然后把待搜索的文件放到該文件夾下面,接著輸入關(guān)鍵字即可搜索,本系統(tǒng)目前支持搜索的文件格式包括.txt、.doc、.xls和.ppt。
在文件搜索之前需要建立索引,在建立索引的時(shí)候?qū)π阅苡绊懽畲蟮牡胤骄褪窃趯⑺饕龑懭胛募臅r(shí)候,所以在具體應(yīng)用的時(shí)候就需要對(duì)此加以控制[4]。
在讀取文件夾下的文件時(shí),我們是通過FileInputStream對(duì)象來完成這一操作的,該對(duì)象只需要有一個(gè)參數(shù)就可以啦,這個(gè)參數(shù)就是文件的存儲(chǔ)路徑,如果我們使用FileInputStream來讀取文件的話,我們還需要通過利用BufferedReader對(duì)象,把文件轉(zhuǎn)換成Buffered的形式存放,最后我們通過IndexSearcher對(duì)象來實(shí)現(xiàn)文件的搜索:
實(shí)現(xiàn)代碼:
IndexWriter iwriter =
new
IndexWriter(directory, analyzer,
true,
IndexWriter.MaxFieldLength.LIMITED);
iwriter.setMaxFieldLength(25000);
// Lucene是不可以對(duì)除Document文件以外的文件建立索引的,Document只是一個(gè)假設(shè)文件
while
((a = br.readLine())
!=
null)
{
Document doc =
new
Document();
doc.add(new
Field(fieldName, a,
Field.Store.YES,
Field.Index.ANALYZED));
iwriter.addDocument(doc);
}
// Field.Store.YES:為該Field值創(chuàng)建索引
// Field.Index.TOKENIZED:索引Field的值,使它能夠被查到
// Field 對(duì)象是用來描述一個(gè)文檔的某個(gè)屬性的
iwriter.close();
// 索引對(duì)象
IndexSearcher isearcher =
new
IndexSearcher(directory,
true);
QueryParser parser =
new
QueryParser(Version.LUCENE_29, fieldName,analyzer);
5.2.3 數(shù)據(jù)庫的連接配置
相關(guān)代碼:
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
String url=
"jdbc:sqlserver://localhost:1433; DatabaseName=LuceneDB2";
String username =
"qian";
String password =
"wqian";
con =
DriverManager.getConnection(url, username, password);
5.2.4 數(shù)據(jù)庫搜索實(shí)現(xiàn)
本模塊解決了數(shù)據(jù)庫快速搜索的問題,這個(gè)問題其實(shí)與文件搜索的原理一樣,第一步都是需要?jiǎng)?chuàng)建索引的,當(dāng)文檔的索引創(chuàng)建好之后,就能夠進(jìn)行搜索的任務(wù)了。
相關(guān)代碼:
// 執(zhí)行sql語句增刪改
public
int updateExecute(String sql)
{
int result =
0;
try
{
Connection con = getConnection();
Statement sta = con.createStatement();
result = sta.executeUpdate(sql);
}
catch
(SQLException e)
{
e.printStackTrace();
}
return result;
}
// 執(zhí)行sql查詢語句 返回一個(gè)ResultSet
public
ResultSet queryExectue(String sql)
{
ResultSet rs =
null;
try
{
Connection con = getConnection();
Statement sta = con.createStatement();
rs = sta.executeQuery(sql);
}
catch
(SQLException e)
{
e.printStackTrace();
}
return rs;
}
public
String executeScalar(String sql)
{
ResultSet rs = queryExectue(sql);
String s =
"";
try
{
while
(rs.next())
{
s = rs.getString(1);
}
}
catch
(SQLException e)
{
e.printStackTrace();
}
return s;
}
這個(gè)時(shí)候,在前端頁面上的用戶提交一個(gè)關(guān)鍵字的查詢請(qǐng)求,而后這個(gè)請(qǐng)求將會(huì)被自動(dòng)進(jìn)行分析處理。最終,系統(tǒng)會(huì)將用戶的查詢指令傳輸?shù)胶笈_(tái)中,并且把檢索到的信息資源進(jìn)行返回,前臺(tái)一般為顯示器,會(huì)將檢索到的信息進(jìn)行顯示:
5.2.5 后臺(tái)數(shù)據(jù)編輯實(shí)現(xiàn)
管理員可以點(diǎn)擊頁面的“登錄”鏈接到管理員登錄頁面,用戶在登錄頁面輸入賬號(hào)和密碼即可登錄系統(tǒng),登錄后用戶可以看到目前系統(tǒng)所有數(shù)據(jù),同時(shí)也可以修改或者刪除任何一條數(shù)據(jù)可以通過標(biāo)題來搜索自己想看的數(shù)據(jù),也可以通過添加按鈕來添加新的數(shù)據(jù):
6 系統(tǒng)測(cè)試
6.1 測(cè)試重要性
該項(xiàng)目是在本地服務(wù)器上進(jìn)行運(yùn)行和調(diào)試,首先是對(duì)Java環(huán)境的安裝及配置,以及對(duì)數(shù)據(jù)庫環(huán)境的安裝與配置,安裝完畢后將文件導(dǎo)入根目錄,以后才可以在瀏覽器上進(jìn)行運(yùn)行、測(cè)試。
在項(xiàng)目開發(fā)過程中,會(huì)遇到那種錯(cuò)綜復(fù)雜的問題,所以,測(cè)試在軟件開發(fā)過程中起到了至關(guān)重要的作用,它的影響力不比任何開發(fā)的環(huán)節(jié)低,因?yàn)檐浖拈_發(fā)是一項(xiàng)巨大的工程,不僅耗時(shí),而且開發(fā)人員也不可能會(huì)預(yù)料到所有可能出現(xiàn)的情況,這樣就會(huì)導(dǎo)致每個(gè)時(shí)期都難免會(huì)產(chǎn)生一系列的錯(cuò)誤,而測(cè)試人員的主要職責(zé)就是,檢查與發(fā)現(xiàn)程序在運(yùn)行的程中的錯(cuò)誤;一個(gè)優(yōu)異的測(cè)試用例,就說明這個(gè)測(cè)試用例可以有極大地概率找出系統(tǒng)中目前還沒有被覺察到的錯(cuò)誤;找出目前還沒有覺察到的錯(cuò)誤,這就是成功的測(cè)試的標(biāo)準(zhǔn)。本系統(tǒng)的測(cè)試和糾錯(cuò)信息流程如圖6.1所示。
軟件測(cè)試,又稱為多模塊測(cè)試,一共有四個(gè)階段:
單元測(cè)試 | 單元測(cè)試的用例從單元詳細(xì)設(shè)計(jì)中導(dǎo)出。 功能性測(cè)試與結(jié)構(gòu)性測(cè)試可用于單元測(cè)試。 |
---|
6.2 測(cè)試用例
通過輸入關(guān)鍵字進(jìn)行查詢,然后根據(jù)搜索結(jié)果判斷系統(tǒng)是否存在問題。
例:搜索“在”,反饋結(jié)果如圖6-2所示:
可見搜索結(jié)果是正確的,并且關(guān)鍵字都已高亮度顯示。
結(jié)論
本次設(shè)計(jì)主要就是通過利用Lucene技術(shù),來實(shí)現(xiàn)搜索引擎的設(shè)計(jì)和實(shí)現(xiàn)的過程。其中用到了開源工具有MyEcipse(提供項(xiàng)目運(yùn)行的Java環(huán)境,編寫程序空間)、sql server2008(數(shù)據(jù)庫,用戶前端展示信息的支撐,是數(shù)據(jù)的存儲(chǔ)地)、tomcat(服務(wù)器,用戶提交檢索請(qǐng)求,由它來進(jìn)行接收、處理)他們分別管控的自身的部分,同時(shí)也相互協(xié)調(diào)配合,這一功能得以正常運(yùn)行和實(shí)現(xiàn),是缺一不可的。
本項(xiàng)目是對(duì)一個(gè)基于Lucene技術(shù)的搜索引擎設(shè)計(jì)與實(shí)現(xiàn)的過程,通過開源庫Lucene的支持,快速地實(shí)現(xiàn)了海量信息的搜索功能,它不僅實(shí)現(xiàn)了文件快速查找的功能,而且還實(shí)現(xiàn)了全文搜索,還能實(shí)現(xiàn)類似百度的分詞搜索效果,效果頗佳。同時(shí)加入了數(shù)據(jù)庫處理。
該系統(tǒng)可以通過擴(kuò)展或改造然后適用于站內(nèi)搜索,這樣可以使用戶快速的找到自己想瀏覽的信息,提高用戶體驗(yàn)和網(wǎng)站流量。
到此搜索引擎的基本功能都已基本完成,但是還有待改進(jìn)或加強(qiáng)的地方,例如如果把分詞做到最優(yōu)最人性化,怎樣分才是最合理,都需要進(jìn)一步研究。
參考文獻(xiàn)
[1] 李剛,宋偉,邱哲.征服Ajax+Lucene構(gòu)建搜索引擎.北京:人民郵電出版社,2006.
[2] 邱哲,符滔滔.開發(fā)自己的搜索引擎-Lucene2.0+Heritrix.北京:人民郵電出版社,2007.
[3] 孫承杰.基于統(tǒng)計(jì)的網(wǎng)頁正文信息抽取方法的研究.中文信息學(xué)報(bào),2004,18(5):17-22.
[4]
http://www.docin.com/p-1436638591.html 基于Lucene全文檢索引擎的應(yīng)用研究與實(shí)現(xiàn).
[5] 朱明.數(shù)據(jù)挖掘.合肥:中國(guó)科學(xué)技術(shù)大學(xué)出版社,2002.
[6] Hu Y H, Li H, Cao Y B et al. Automatic extraction of titles from general documents using machine learning. Information Processing and Management, 2005, 42 (5):1276-1293.
[7] 王德峰,李東.搜索引擎Google的體系結(jié)構(gòu)及其核心技術(shù)研究.哈爾濱商業(yè)大學(xué)學(xué)報(bào)(自然科學(xué)版),2006,(01).
[8] 呂平.基于Ajax的IP網(wǎng)絡(luò)管理系統(tǒng)的研究與實(shí)現(xiàn):(碩士學(xué)位論文).北京:北京交通大學(xué), 2007.
[9] 陳兵國(guó).基于AJAX的網(wǎng)站設(shè)計(jì)與實(shí)現(xiàn).福建電腦,2007,(12).
[10] 張校乾,金玉玲,侯麗波.一種基于Lucene檢索引擎的全文數(shù)據(jù)庫的研究與實(shí)現(xiàn).現(xiàn)代圖書情報(bào)技術(shù),2005.
[11] 楊海東.基于Ajax技術(shù)的異步搜索引擎研究與實(shí)現(xiàn):(碩士學(xué)位論文).南京信息工程大學(xué),2007.
[12] 周珍娟,張字平,陸玲.基于Lucene2.0的電子文獻(xiàn)全文檢索系統(tǒng).電腦知識(shí)與技術(shù)(學(xué)術(shù)交流),2007.
[13] 朱永盛,武港山.基于Web的新聞信息抽取.計(jì)算機(jī)工程,2006,32(10):74-76.
[14] 劉遷,賈惠波.中文信息處理中自動(dòng)分詞技術(shù)的研究與展望.計(jì)算機(jī)工程與應(yīng)用,2006.
[15] 丁承.基于字表的中文搜索引擎分詞系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn).計(jì)算機(jī)工程,2001.
關(guān)鍵詞:設(shè)計(jì),實(shí)現(xiàn),索引