搜索引擎的設(shè)計與實現(xiàn)(源碼+PPT+論文)
摘要:?我們處在一個大數(shù)據(jù)的時代,伴隨著網(wǎng)絡(luò)信息資源的龐大,人們越來越多地注重怎樣才能快速有效地從海量的網(wǎng)絡(luò)信息中,檢索出自己需要的、潛在的、有價值的信息,從而可以有效地在日常工作和生活中發(fā)揮作用。因為搜索引擎這一技術(shù)很好的解決了用戶搜索網(wǎng)上大量信息的難題,所以在當(dāng)今的社會,無論是發(fā)展迅猛的計算機行業(yè),還是作為后起之秀的信息產(chǎn)業(yè)界,都把Web搜索引擎的技術(shù)作為了爭相探討與專研的方向。? 搜索引擎的定義就是指按照既定的
策略
與方法,采取相關(guān)的
計算機程序
,通過在
互聯(lián)網(wǎng)
中進行尋找信息,并顯示
信息
,最后把找到的信息進行整理和篩選,為搜索引擎的使用者提供
檢索
信息的服務(wù),終極目標(biāo)是為了提供給使用者,他所搜索信息相關(guān)的資料的計算機
系統(tǒng)
。搜索引擎的種類繁多,既可以進行
全文的索引
,還可以進行
目錄的索引
,不僅有集合式的搜索引擎,還有
垂直搜索的引擎
以及
元搜索引擎
。除此之外,還有門戶搜索引擎和免費鏈接列表等等。? 本文首先介紹了搜索引擎出現(xiàn)的必要性,以及什么是搜索引擎、搜索引擎的分類、處理流程、核心技術(shù),同時也對如何才能提高搜索引擎的精準(zhǔn)度以及關(guān)聯(lián)度進行了更加深入的研究。? 關(guān)鍵詞:?Web搜索引擎、信息檢索、人機交互、Lucene全文檢索引擎 Development and implementation of search engine 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 目 錄
目 錄IVIV 1 緒論11? 1.1 項目背景11 1.2 國內(nèi)外發(fā)展現(xiàn)狀及分類22 1.3 本論文組織結(jié)構(gòu)介紹33 2 相關(guān)技術(shù)介紹55? 2.1什么是搜索引擎55 2.2 sqlserver數(shù)據(jù)庫66 2.3 Tomcat服務(wù)器77 3 搜索引擎的基本原理88? 3.1搜索引擎的基本組成及其功能88 3.2搜索引擎的詳細(xì)工作流程1111 4 系統(tǒng)分析與設(shè)計1414? 4.1系統(tǒng)分析1414 4.2系統(tǒng)概要設(shè)計1414 4.2系統(tǒng)實現(xiàn)目標(biāo)1515 5 系統(tǒng)詳細(xì)實現(xiàn)1616? 5.1實現(xiàn)環(huán)境配置1616 5.2功能實現(xiàn)1616 5.2.1 建立索引1616 5.2.2 文件搜索實現(xiàn)1818 5.2.3 數(shù)據(jù)庫的連接配置2020 5.2.4 數(shù)據(jù)庫搜索實現(xiàn)2020 5.2.5 后臺數(shù)據(jù)編輯實現(xiàn)2222 6 系統(tǒng)測試2424? 6.1測試重要性2424 6.2測試用例2525 結(jié) 論2727? 參 考 文 獻228? 致 謝229? 1 緒論
1.1 項目背景
環(huán)球信息網(wǎng)(World Wide Web),即3W,一般在計算機與信息行業(yè)用Web這個詞匯來來表示,萬維網(wǎng)是它進入中國時所賦予的稱呼,其實,這就是一個資料的匯集與存儲的空間。 在這個空間中,以事物為單位,一個事物也可以稱為一樣“資源”,利用URL來標(biāo)識,統(tǒng)一資源標(biāo)識符”(URL。這些資源通過超文本傳輸協(xié)議(Hypertext Transfer Protocol,HTP)傳送給終端用戶,其中給到用戶手上的是一個個鏈接,然后用戶通過逐層點擊鏈接,就可以查看到資源,也可以獲得到資源。 萬維網(wǎng)也常常被人們誤以為是因特網(wǎng)的近義詞,在這里必須要表明的概念是:萬維網(wǎng)與因特網(wǎng)存在著本質(zhì)的區(qū)別。因特網(wǎng)(Internet)是指,把全世界所有的各類型電腦,利用網(wǎng)絡(luò)連接,所形成的硬件框架,這是一個實實在在的“網(wǎng)”。萬維網(wǎng),其本質(zhì)是一種功能,即讓使用者光看網(wǎng)絡(luò)頁面,而頁面之間又交相輝映,從而讓使用者覺得這也是一種“網(wǎng)”,但這種網(wǎng)是虛擬的,是不存在的。 可以說1994年在信息時代是一個重大突破的一年,因為萬維網(wǎng)(World Wide Web)出現(xiàn)了。在這一改變之前,人們的信息獲取方式還是通過各種傳統(tǒng)文化傳媒,相對于萬維網(wǎng)來說是很傳統(tǒng)、笨拙的,它在開放性和廣泛的可訪問性極大的激勵了人們創(chuàng)作的積極性。所以萬維網(wǎng)的出現(xiàn)極大的縮短了人們信息獲取的時間,同時信息的時效性也得到了保障。萬維網(wǎng)一出現(xiàn)就收到了全世界各國人的追捧,人們在它出現(xiàn)的十幾年的一個時間段中,就在萬維網(wǎng)這一平臺上發(fā)布了幾十億條的網(wǎng)頁信息,他的一個數(shù)據(jù)量是那么的龐大,粗略計算一下,萬維網(wǎng)上的網(wǎng)頁信息每天都會不斷增長幾十萬。因為網(wǎng)絡(luò)化、數(shù)字化的信息資源,所以網(wǎng)絡(luò)信息也是有利有弊:利的一面是提高了我們的信息量;不利的一面是龐大的信息一并向我們開來,猶如破堤的江水,洶涌澎湃,造成了我們無所適從。 關(guān)于搜索引擎的由來,北美加拿大(Canada)的麥吉爾大學(xué)就必須要介紹一下了,早在上世紀(jì),90年代之初,由于網(wǎng)絡(luò)資源眾多,分散性特別大,人們在找資料的時候特別費力。麥吉爾大學(xué)的團隊也意識到了這個問題,所以他們就研發(fā)出了Archie,這是一個可以自動運行的系統(tǒng),可以完成在FTP上搜集有用資源的作用。該系統(tǒng)定期會自動搜索FTP系統(tǒng)上保存的文檔名以及相關(guān)的資源,而且還可以自行分析,如果有客戶端發(fā)出搜索請求,該系統(tǒng)會根據(jù)搜索請求的內(nèi)容,自動提供保存在主機中文件。在以Web網(wǎng)頁為對象的搜索引擎系統(tǒng)的大背景下,搜索引擎被人們當(dāng)做了在網(wǎng)上查找信息的重要手段,通過搜索引擎系統(tǒng)人們可以在浩瀚的網(wǎng)絡(luò)海洋中第一時間找到自己真正想要的信息,并且搜索引擎的智能以及現(xiàn)在網(wǎng)頁的特性使得人們只要輸入相關(guān)的詞語(即關(guān)鍵詞)就可以找到相關(guān)的信息。 現(xiàn)如今,人們看到的百度、Google取得的顯著成效,可以說是成為了行業(yè)的領(lǐng)頭羊,所以整個世界也都把視覺一部分放置在了搜索引擎這一領(lǐng)域當(dāng)中,各種各樣的搜索服務(wù)猶如雨后春筍一般爭相冒出。搜索引擎不僅種類愈來愈多,而且其服務(wù)的質(zhì)量也越來越全面,從最初期的國外的Google引擎、Yahoo引擎,到如今的中國的Baidu引擎、360引擎等等。隨著web技術(shù)的不斷完善,網(wǎng)絡(luò)信息資源也是翻倍增長的(變化關(guān)系是成正比的)。所以為了滿足用戶的需要,既可以快速的找到到資源,而且還可以提高資源的質(zhì)量,各類型的引擎中,必須引入檢索這一概念。此外,在企業(yè)級應(yīng)用的市場上,由于搜索的資源需求量大,要求的精度更加高,全文檢索的功能也就被人們重視起來了,例如在各種文件檔案的處理過程中、企業(yè)管理的軟件中。 在這樣的環(huán)境下,搜索引擎的技術(shù)也在迅猛發(fā)展。各種討論搜索引擎的文章、博客、雜志等席卷網(wǎng)絡(luò)的相關(guān)信息。在這個信息化全面進入人們生活各層各面的時代,搜索引擎這項技術(shù)無疑會在最熱門的技術(shù)中占有一席之地。 1.2 國內(nèi)外發(fā)展現(xiàn)狀及分類
當(dāng)今的時代,網(wǎng)絡(luò)信息呈現(xiàn)指數(shù)型上升,其復(fù)雜性不言而喻,而網(wǎng)絡(luò)檢索技術(shù)的發(fā)展卻不盡如人意,有很多方面的不足,具體闡述如下: 隨著網(wǎng)頁數(shù)量的迅猛增加,盡管是專業(yè)人員,他對所有的認(rèn)知也存在不足,同時專業(yè)人員的工作量也很大,單憑人工操作,是沒有辦法對如此龐大的信息量進行有效的分類,更不用說是再加以檢索和利用了。網(wǎng)絡(luò)用戶接觸的是龐大對的、未經(jīng)組織的信息,只是使用簡單的關(guān)鍵詞搜索,它對應(yīng)的反饋給用戶的結(jié)果冗余度較大且涵蓋有限,這是讓用戶無法接受的。信息實用性評價低迷。有些網(wǎng)站在網(wǎng)頁中高頻的出現(xiàn)某些關(guān)鍵字,從而輕易的被一些顯著的搜索引擎收錄,以此來提高該網(wǎng)站的知名度,但實際上它對用戶是沒有提供任何有價值的信息。網(wǎng)絡(luò)信息變更過快。如今的社會就是一個快節(jié)奏的社會,人們更多的喜歡是速食文化,即盡可能快的獲取信息,可是分布式的信息布局,就算網(wǎng)絡(luò)傳輸速度再快,要想實現(xiàn)實時的搜索難度堪比登天啊,即使是上一秒刷新過的網(wǎng)頁,在下一秒就會有無盡的可能,時效性一直是人們追求網(wǎng)絡(luò)信息的方向,但卻很難做到真正的實時。
速度和效率往往是會體現(xiàn)這個搜索引擎是否良好的標(biāo)準(zhǔn),故此,對于網(wǎng)絡(luò)信息檢索工具而言,其發(fā)展的主要方向就是,在信息檢索的速度和效率是一步一步不斷改進和突破,以提高檢索的技術(shù),提供更高的檢索服務(wù)的質(zhì)量,改善甚至消除局部網(wǎng)絡(luò)信息檢索的用戶不滿意之處。 萬維網(wǎng):它是世界上最大的域名注冊以及虛擬主機提供商,現(xiàn)在的域名多種多樣,不過以www開頭的最多,相應(yīng)的費用也是最貴的,但是,現(xiàn)在還有一批域名不是以www開頭,直接二級域名開頭,我們在做網(wǎng)站的時候,首先需要購買域名,然后大約根據(jù)程序的大小訂購服務(wù)器,服務(wù)器按系統(tǒng)分為linux、window的,按開發(fā)語言也可以選擇服務(wù)器,按代碼的上傳方式也可以選擇服務(wù)器,服務(wù)器有一定的界面,當(dāng)然你也可以在linux系統(tǒng)中敲指令來實現(xiàn),window服務(wù)器使用起來比較麻煩,因為你的電腦是window的,然后你要進入另外一臺主機中,就會出現(xiàn)只能選擇其一的現(xiàn)象,不能同時看到,接著建立站點,設(shè)置 ftp,建立數(shù)據(jù)庫,然后上傳代碼。 1.3 本論文組織結(jié)構(gòu)介紹
本次設(shè)計是在Lucene技術(shù)之上進行的開發(fā),最終成功的設(shè)計出搜索引擎的全過程。從開始本次設(shè)計到最終的實現(xiàn),都會在下述做詳細(xì)的介紹: 第1章 緒論,本章主要從如下幾個方面做了闡述:1、本次設(shè)計的系統(tǒng)所會面臨的問題;2、怎么處理所面臨的難題;3、攻克難題的詳細(xì)內(nèi)容;4、本次課題是基于什么樣的研究背景、意義而進行;5、本次設(shè)計的可行性分析以及論文中各章節(jié)內(nèi)容描述。 第2章 相關(guān)技術(shù)介紹,對涉及到的理論知識和用到的開發(fā)工具做相關(guān)闡述。 第3章搜索引擎的基本原理,詳細(xì)介紹了搜索引擎的基本組成結(jié)構(gòu)和工作原理。 第4章 搜索引擎系統(tǒng)的分析與設(shè)計,根據(jù)所需要實現(xiàn)的功能入手,一步步的完成設(shè)計目標(biāo)。 第5章 搜索引擎系統(tǒng)的具體設(shè)計步驟,分步驟詳細(xì)地表述了該設(shè)計的實現(xiàn)過程以及設(shè)計中會遇到的注意事項。 第6章 系統(tǒng)測試,對系統(tǒng)做了相關(guān)測試和評價說明。 最后:總結(jié)、致謝、參考文獻。 2 相關(guān)技術(shù)介紹 2.1什么是搜索引擎?
隨著Web信息的爆炸型增長,Web型搜索引擎的設(shè)計就被提上了日程,大約是從上世紀(jì)90年代開始,逐漸的逐漸發(fā)展起來。實際上,本次設(shè)計的就是一種在互聯(lián)網(wǎng)上,專門給用戶提供各種查詢信息服務(wù)的網(wǎng)站,它以自己特定的方式在互聯(lián)網(wǎng)中尋找信息,并且把信息提取出來,然后再進行理解信息,把信息重新組織以及信息的加工處理,并反饋給用戶的服務(wù),從而達到信息資源導(dǎo)航的目的。用戶可以通過自由詞、關(guān)鍵字、等方式進行查詢,也可以利用全文進行檢索,或者根據(jù)類別進行搜索,甚至還可以加入一些特有的信息進行限制,例如名字、性別、出版社、序列號等等。? 如今搜索引擎提供的信息資源導(dǎo)航服務(wù)已發(fā)展成互聯(lián)網(wǎng)上非常重要的網(wǎng)絡(luò)服務(wù)之一,搜索引擎網(wǎng)站也被稱之為 “網(wǎng)絡(luò)門戶”。 根據(jù)搜集資源與提供給用戶的方式進行區(qū)別,如今的搜索引擎可以劃分為兩類:? (1)目錄式搜索引擎:按照人為地方案或者是半自動的工作模式去搜索信息,然后指定職業(yè)的工作人員查看信息,采取人工的方式對信息進行篩選,最終會把檢索到的信息分類存放在指定的框架當(dāng)中。這一類信息大多數(shù)是直接與網(wǎng)站進行交互的,只可以提供文檔目錄的查看以及直接檢索的服務(wù)。由于這一類型的搜索引擎引入了人的智能的功能,所以提供的信息質(zhì)量非常高,精確地匹配所檢索的信息;但由于需要指定人員進行查看和分類,這無疑會使得信息的更新不夠及時,而且信息量如此之大,會使得維護任務(wù)異常繁重。雅虎(yahoo!)就是這一類型的典型代表。? (2)機器人搜索引擎:利用蜘蛛 (spider)程序在互聯(lián)網(wǎng)中進行自主的檢索資源,通過索引器搜索的信息繪制索引表,索引器就是依照使用者的輸入請求,查看索引庫中的內(nèi)容,最終將匹配到的結(jié)果顯示出來,供用戶查看。這一類型的服務(wù)方式是面向web的全文檢索。該類搜索引擎相比于目錄式的搜索引擎,省去了人工操作的環(huán)節(jié),使得更新更加及時,而且由于是計算機自動進行查詢,會使得查詢得到的信息量大幅提升;但正是由于這樣,會使得返回的信息匹配率相比于目錄式檢索會有所下降,用戶所看到的信息過于龐大,還需自身進行篩選。由于其優(yōu)點突出,目前,比較流行的搜索引擎大多數(shù)采取了這一種方式,這其中代表性最強的引擎有: google(谷歌)、Baidu(百度)、360、等等。? 現(xiàn)在網(wǎng)絡(luò)的搜索引擎也已經(jīng)有不少,國際上比較著名的有Google(谷歌)等等。國內(nèi)目前也建立了很多的搜索引擎,比如:百度、360、搜狐、新浪等。其中,在信息檢索的準(zhǔn)確率和全面性這兩個指標(biāo)上,做得較好有Google、百度。 同時搜索引擎的準(zhǔn)確度及相關(guān)性還是有待科技人員進一步提高和完善的。? 以Google為例再具體的闡述一下,它可以在檢索信息時做到了快、準(zhǔn)、狠。它最厲害的優(yōu)勢在于:1、超大容量的web存儲空間。據(jù)保守估計,Google目前收錄的Web網(wǎng)頁總量己經(jīng)高達80億。2、響應(yīng)速度及時。據(jù)數(shù)據(jù)顯示,Google(谷歌)通常搜尋所用時間大致上小于0.3 s,這么卓越的性能是基于數(shù)百臺高性能的硬件服務(wù)器以及谷歌公司所使用的的分布式并行查詢的系統(tǒng)。3、反饋信息全面。據(jù)了解,Google查詢反饋的信息不僅僅集中于各個大型熱門網(wǎng)站,同時針對的是更多的特定的Web頁面(即便是存放這些頁面的網(wǎng)站很冷門),但正是由于這樣,才會使得谷歌可以獲取的信息,能夠和使用者查找的請求具有較高的相關(guān)度、匹配性、準(zhǔn)確度,Google(谷歌)不斷發(fā)展改善的頁面優(yōu)先度程序和查詢到的信息最優(yōu)化的排序機制,使得谷歌能夠在搜索引擎中處于佼佼者的地位。 2.2 sqlserver數(shù)據(jù)庫 值得介紹的是,數(shù)據(jù)庫是由一個個基本的表組成的,這些表包括約束、規(guī)則、索引、觸發(fā)器、函數(shù)、默認(rèn)值等其他數(shù)據(jù)庫對象,同時這些數(shù)據(jù)庫對象都是依附于表對象而存在的。用自己的概括數(shù)據(jù)庫跟表的關(guān)系:數(shù)據(jù)庫是分母(無限大),表是分子(一個表對應(yīng)一個單位)。 本次設(shè)計,我采用的是sqlserver數(shù)據(jù)庫,主要使用的是sqlserver 2008這款軟件,它的最大的優(yōu)勢在于: 可以很快捷的添加刪除修改數(shù)據(jù);
2)它的圖形化界面可以很快的建立表與表之間的聯(lián)系圖,一個表的外鍵關(guān)系可以很快地建立出來;
3)有很強大的安全機制,有自己的導(dǎo)入導(dǎo)出格式,很安全;具有強大的功能,事務(wù)操作等等。
它也存在的缺點:在環(huán)境配置上要相較其他中小型的服務(wù)器要復(fù)雜一些,同時我們還知道sqlserver的語法跟mysql,orcale之間有一些像素也有一些不同,包括在轉(zhuǎn)化為mysql或者orcale時都是有些差異的。 2.3 Tomcat服務(wù)器
Tomcat是一個輕量級的應(yīng)用型服務(wù)器,它具有如下的優(yōu)點:系統(tǒng)的擴展性能優(yōu)越、服務(wù)器的性能非常穩(wěn)定、服務(wù)器的源碼開放,便于發(fā)燒友的研究與學(xué)習(xí)以及本身就帶有的免費獲取的機制,這都是導(dǎo)致Java技術(shù)研究人員里有一大批忠于Tomcat的人員。這款服務(wù)器還是目前相當(dāng)流行的Web應(yīng)用服務(wù)器。 我們都知道,Tomcat既是Servlet容器,還是獨立的服務(wù)器,如果想要有動態(tài)泰德效果,需要把動態(tài)數(shù)據(jù)放在服務(wù)器上,基于java語言,Tomcat是一個容器,存放并且運行基于servlet的java程序,像我們熟悉的三大框架都是你可以在Tomcat跑起來的,我們通常會把寫好的jsp的網(wǎng)站打包成一個壓縮文件,然后放到服務(wù)器上,在瀏覽器中輸入域名/網(wǎng)址就可以運行起來了,就可以實現(xiàn)跟數(shù)據(jù)庫的連接,獲取到動態(tài)數(shù)據(jù)。 3 搜索引擎的基本原理
3.1搜索引擎的基本組成及其功能
圖3-1 搜索引擎的基本組成 由上圖可知,搜索引擎程序可以化分為搜索器子程序、索引器子程序、檢索器子程序以及用戶接口子程序等模塊;存儲器以及存儲桶是用來存儲所檢索到的各種資源的。? 搜索引擎程序的組成結(jié)構(gòu)具體如下: l.搜索器 (Crawler)? 搜索器,顧名思義,就是用于在互聯(lián)網(wǎng)中探索、尋找信息,最終的目的是為了把信息存儲在存儲單元中的。這種計算機程序,需要日夜不停地處于運行的狀態(tài),為的是可以盡可能的更快地搜集更多的新信息,這些信息的種類是多種多樣的,包括有HTML格式、XML格式、字處理文檔格式以及多媒體信息等等,此外搜索引擎還需要定期更新存儲器里的信息。 表3-1搜索引擎程序的組成結(jié)構(gòu)表 搜索器即蜘蛛((Spider)程序,它無時無刻不在運行,主要任務(wù)是從因特網(wǎng)上搜集各種的信息資源,然后通過壓縮處理等手段,使其占用空間變小,最終存到存儲庫里,為日候的用戶檢索做準(zhǔn)備。索引器把存儲庫里的信息提取出來,進行識別與分析,根據(jù)結(jié)果進行分類,然后再建立索引,并進行簡單的排隊,把結(jié)果放在恰當(dāng)?shù)挠布鎯卧?,也就是上文提到的存儲桶。檢索器當(dāng)用戶進行查詢的時候,檢索器會通過判斷用戶輸入的請求,在存儲桶中進行查找,將查到的結(jié)果,根據(jù)匹配度、優(yōu)先度等指標(biāo)進行最終的排序,呈現(xiàn)給用戶最好的結(jié)果。用戶接口是用戶與搜索引擎進行人機交互的界面,既可以用于輸入用戶的請求,也可以用來返回查找的結(jié)果,供用戶選擇。 如今,互聯(lián)網(wǎng)已經(jīng)進入了尋常百姓的家中,人們可以自由的發(fā)布信息,導(dǎo)致信息更新的很快,只有定時的更新網(wǎng)絡(luò)上的信息,才能避免使用者搜索信息時的死連接或者是無效連接?,F(xiàn)在我們考慮的搜集信息的策略有兩種: 表3-2 搜集信息的策略
為了提高信息的發(fā)現(xiàn)以及信息的更新速度, 搜索器的實現(xiàn)方法通常會采用分布式、并行計算技術(shù),這樣就可以滿足商業(yè)搜索引擎每天幾百萬網(wǎng)頁的的信息發(fā)現(xiàn)了。? 2.索引器(Indexer)? 索引器,通過閱讀所搜集的信息,并進行整理,將信息中的索引項生成索引表,同時還可以用索引項表示文檔。索引項有客觀索引項以及內(nèi)容索引項之分: 表3-3 索引項的分類
為了對文檔的內(nèi)容進行區(qū)分,通常會給單索引項賦權(quán)值,這樣就可以用單索引項進行區(qū)分了,而且還可以用來得出查詢結(jié)果與查詢目標(biāo)的相關(guān)度。一般使用的方法有:統(tǒng)計學(xué)方法、概率學(xué)方法以及信息論法。短語索引項的提取,一般會采用統(tǒng)計學(xué)的方法或者是概率學(xué)的方法甚至是語言學(xué)的方法。? 索引表,一般會采用由索引項去查找相對應(yīng)文檔的內(nèi)容,這就是所謂的倒排表 (InversionList)。當(dāng)然,索引表還會把索引項在文檔中出現(xiàn)的位置也記錄在表,目的是為了計算索引項之間的關(guān)系,究竟是相鄰還是接近。 索引器的算法有兩種:集中式、分布式,每一種算法都有優(yōu)點,但也都有其缺點。當(dāng)搜索的數(shù)據(jù)量巨大的時候,為了解決跟上信息量上升迅速的難題,必須采取即時索引 (InstantIndexing)的方式,一個漂亮的索引算法,隨著索引器的搜索的數(shù)據(jù)的提升,其性能的優(yōu)越性就會展露無遺。索引的質(zhì)量的高低,有時就會完全決定搜索引擎的有效性。 3.檢索器(Searcher)? 依照用戶的查詢請求,搜索索引庫并快速的檢索出所需的文檔,然后比較所查到的文檔和查詢請求之間的相關(guān)度評價。最終,根據(jù)相關(guān)度的高低,將輸出的查詢結(jié)果進行由高到低的排序,還可以實現(xiàn)用戶相關(guān)性與搜索引擎之間的反饋機制。? 檢索器的設(shè)計,目前已有四種成熟的模型: 混合的模型、代數(shù)的模型、以及概率模型、集合理論模型。? 4.用戶接口(UserInterface)? 搜索引擎,目的是為了讓用戶進行檢索信息,所以必須有用戶接口,這樣才能實現(xiàn)人機交互,從而才能真正的體現(xiàn)搜索引擎的價值。用戶接口就是用來進行,將用戶的查詢請求輸入搜索引擎、顯示用戶的查詢結(jié)果、更高級的可以提供用戶相關(guān)性反饋機制,從而更好地實現(xiàn)搜索引擎,其所提供的信息的準(zhǔn)確性、合理性等等。 有了用戶接口,不僅方便了用戶使用搜索引擎,而且使得用戶可以更加的高效率、多方式地得到及時的信息。 用戶輸入接口我們可以分為兩類,一種是簡單接口,另外一種就是與之對應(yīng)的復(fù)雜接口。? 簡單接口,就是最為平常的一種交互界面,使用者只能夠輸入查詢信息,不能進行更加精確地查詢,而且也沒有反饋的功能; 復(fù)雜接口,不僅可以提供輸入查詢信息的文本框,而且使用者還可以對查詢得信息進行限制,減小搜索空間,例如,使用邏輯運算符、使用相近、相鄰的關(guān)系、域名的范圍(如.cn、.com)、出現(xiàn)的位置 (如題目、關(guān)鍵字、作者、時間)、搜索文檔的字?jǐn)?shù)等等。中國知網(wǎng)、萬方數(shù)據(jù)庫等等,都可以提供上述限制,由于不同的公司所用的限制方式不同,會給用戶的使用帶來一些不便,當(dāng)前就有一些公司與機構(gòu),正在著手制定查詢選項的一系列標(biāo)準(zhǔn)。 3.2搜索引擎的詳細(xì)工作流程?
搜索引擎的詳細(xì)軟件內(nèi)部構(gòu)成和具體工作流程說明如下:?
圖 3-2 搜索引擎的內(nèi)部構(gòu)件 搜索引擎的工作原理:當(dāng)我們在一個表單中輸入要搜索的內(nèi)容時,搜索引擎就會根據(jù)我們輸入的內(nèi)容在數(shù)據(jù)庫中進行搜索,首先他會匹配各個網(wǎng)頁中的頭部信息中的關(guān)鍵字,如果這個網(wǎng)站中有這個關(guān)鍵字的話,就會匹配出來;如果沒有的話,搜索引擎就會自動過濾掉。簡單直白的說,搜索引擎的工作原理就是對已存在的一個大型數(shù)據(jù)庫內(nèi)的信息資源進行智能化的篩選過程,并將有效的結(jié)果反饋給用戶。 在這一個過程中無論是誰家的搜索引擎,無論是百度還是谷歌還是雅虎都會采用自己的算法根據(jù)一些指標(biāo)來進行判斷,然后暗戰(zhàn)關(guān)聯(lián)度。高低從高到低排序。在這一過程中,需要我們在做網(wǎng)站的時候頭部關(guān)鍵字部分還有超鏈接部分 還有在做完網(wǎng)站之后會引入一個文件以便收錄,結(jié)合一些SEO技術(shù),一個成功的網(wǎng)站是會在排名前五,而且通過一些合理的頁面布局,利用不同的工具,還有超鏈接的設(shè)置要合理,避免垃圾鏈接無用鏈接。通過讓搜索引擎爬你的網(wǎng)站,從而增加網(wǎng)站的流量,為各大站長帶來收益。 我們通常會用好多指令查看某一個網(wǎng)站的瀏覽人數(shù),但是對于每一個搜索引擎又各有各的算法,在百度適用的不一定在谷歌適用。典型的我們會通過查看看site://
http://www.
xxx.com
?類型的網(wǎng)站,來了解某一個網(wǎng)站的瀏覽人數(shù)。 4 系統(tǒng)分析與設(shè)計
4.1系統(tǒng)分析
經(jīng)過對搜索引擎的研究同時與Lucene自身的特性相結(jié)合,將本次設(shè)計所需要實現(xiàn)的功能闡述如下: 支持桌面文件搜索,格式包括txt、doc、xls和ppt;支持分詞查詢支持全文搜索能夠高亮顯示搜索關(guān)鍵字顯示查詢所用的時間顯示搜索歷史、過濾關(guān)鍵字
分詞查詢與全文搜索這兩項功能,我們都可以利用Lucene本身自帶的庫加上相關(guān)算法就可以完成設(shè)計了,為了使得關(guān)鍵字的高亮度這一問題得到解決,顯然,我們需要利用Highlighter的輔助,通過數(shù)據(jù)庫持久化保存數(shù)據(jù)。 4.2系統(tǒng)概要設(shè)計
在我們進行需求分析的時候,制定的用例以及領(lǐng)域模型都可以直接的帶入到設(shè)計階段,我們粗略設(shè)計的搜索引擎系統(tǒng)的構(gòu)架如下:
圖4-1 系統(tǒng)總體架構(gòu) 4.2系統(tǒng)實現(xiàn)目標(biāo)
希望實現(xiàn)一個可用于海量信息快速搜索的個性化引擎,它應(yīng)該具有快速、便捷和精確等特性,并且能夠一目了然而看到搜索耗時,關(guān)鍵字高亮度顯示等等個性化效果。實現(xiàn)時希望不需要高配置的硬件資源以及復(fù)雜的環(huán)境配置或搭建,幸運的是開源Lucene庫給我們提供了可能。 5 系統(tǒng)詳細(xì)實現(xiàn)
5.1實現(xiàn)環(huán)境配置
因為我所選擇的搜索引擎是基于Lucene的,所以需要利用Lucene的一些jar包,這樣才能借助Lucene完成我們自己想要的搜索功能,并且為了實現(xiàn)分詞,我們還需要引用分詞組件的相關(guān)類庫,具體的引用類庫如圖5-1所示:
圖 5-1 Lucene配置 5.2功能實現(xiàn)
5.2.1 建立索引
Lucene對數(shù)據(jù)的檢索是在索引文件中查找的,可能會有人問為什么不直接在數(shù)據(jù)中檢索呢?一個是數(shù)據(jù)庫檢索要實現(xiàn)全文檢索,實現(xiàn)分詞是相當(dāng)困難的,而且,如果數(shù)據(jù)量小只有幾百幾千倒是可以考慮用數(shù)據(jù)庫檢索。把數(shù)據(jù)從數(shù)據(jù)庫里讀取出來,寫入索引文件的時候是一條一條記錄的寫入的。 由于Lucene只能替文本這一類型的數(shù)據(jù)組建索引,所以為了進行其他類型的數(shù)據(jù)進行檢索,只能把其他的格式的數(shù)據(jù)用文本類型的替換,這樣就可以進行索引、搜索了。如果需要對HTML文檔進行索引的話,你就首先需要利用文本格式把 HTML文檔替換,隨后才可以將轉(zhuǎn)化的結(jié)果輸入 Lucene進行索引與檢索,接著就會創(chuàng)建一份索引文件,我們需要把它保存到存儲器里面,最終通過判斷用戶在UI界面輸入的查詢請求,從建立好的索引文件中查找。 實現(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 文件搜索實現(xiàn)
文件搜索首先需在設(shè)置系統(tǒng)一個搜索文件夾,然后把待搜索的文件放到該文件夾下面,接著輸入關(guān)鍵字即可搜索,本系統(tǒng)目前支持搜索的文件格式包括.txt、.doc、.xls和.ppt. 在文件搜索之前需要建立索引,在建立索引的時候?qū)π阅苡绊懽畲蟮牡胤骄褪窃趯⑺饕龑懭胛募臅r候, 所以在具體應(yīng)用的時候就需要對此加以控制[4]. 在讀取文件夾下的文件時,我們是通過FileInputStream對象來完成這一操作的,該對象只需要有一個參數(shù)就可以啦,這個參數(shù)就是文件的存儲路徑,如果我們使用FileInputStream來讀取文件的話,我們還需要通過利用BufferedReader對象,把文件轉(zhuǎn)換成Buffered的形式存放,最后我們通過IndexSearcher對象來實現(xiàn)文件的搜索: 實現(xiàn)代碼: IndexWriter iwriter = new IndexWriter(directory, analyzer, true, IndexWriter.MaxFieldLength.
LIMITED
); iwriter.setMaxFieldLength(25000); // Lucene是不可以對除Document文件以外的文件建立索引的,Document只是一個假設(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 對象是用來描述一個文檔的某個屬性的 iwriter.close(); // 索引對象 IndexSearcher isearcher = new IndexSearcher(directory, true); QueryParser parser = new QueryParser(Version.
LUCENE_29
, fieldName,analyzer);
圖5-2 文件搜索效果圖 5.2.3 數(shù)據(jù)庫的連接配置
相關(guān)代碼: Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); Stringurl="jdbc:sqlserver://localhost:1433; DatabaseName=LuceneDB2"; String username = "qian"; String password = "wqian"; con = DriverManager.getConnection(url, username, password); 5.2.4 數(shù)據(jù)庫搜索實現(xiàn)
本模塊解決了數(shù)據(jù)庫快速搜索的問題,這個問題其實與文件搜索的原理一樣,第一步都是需要創(chuàng)建索引的,當(dāng)文檔的索引創(chuàng)建好之后,就能夠進行搜索的任務(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查詢語句 返回一個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; } 這個時候,在前端頁面上的用戶提交一個關(guān)鍵字的查詢請求,而后這個請求將會被自動進行分析處理。最終,系統(tǒng)會將用戶的查詢指令傳輸?shù)胶笈_中,并且把檢索到的信息資源進行返回,前臺一般為顯示器,會將檢索到的信息進行顯示: 圖5-3 檢索結(jié)果顯示圖 5.2.5 后臺數(shù)據(jù)編輯實現(xiàn)
管理員可以點擊頁面的“登錄”鏈接到管理員登錄頁面,用戶在登錄頁面輸入賬號和密碼即可登錄系統(tǒng),登錄后用戶可以看到目前系統(tǒng)所有數(shù)據(jù),同時也可以修改或者刪除任何一條數(shù)據(jù)可以通過標(biāo)題來搜索自己想看的數(shù)據(jù),也可以通過添加按鈕來添加新的數(shù)據(jù): 圖5-4 后臺登錄界面 6 系統(tǒng)測試
6.1測試重要性
該項目是在本地服務(wù)器上進行運行和調(diào)試,首先是對Java環(huán)境的安裝及配置,以及對數(shù)據(jù)庫環(huán)境的安裝與配置,安裝完畢后將文件導(dǎo)入根目錄,以后才可以在瀏覽器上進行運行、測試。 在項目開發(fā)過程中,會遇到那種錯綜復(fù)雜的問題,所以,測試在軟件開發(fā)過程中起到了至關(guān)重要的作用,它的影響力不比任何開發(fā)的環(huán)節(jié)低,因為軟件的開發(fā)是一項巨大的工程,不僅耗時,而且開發(fā)人員也不可能會預(yù)料到所有可能出現(xiàn)的情況,這樣就會導(dǎo)致每個時期都難免會產(chǎn)生一系列的錯誤,而測試人員的主要職責(zé)就是,檢查與發(fā)現(xiàn)程序在運行的程中的錯誤;一個優(yōu)異的測試用例,就說明這個測試用例可以有極大地概率找出系統(tǒng)中目前還沒有被覺察到的錯誤;找出目前還沒有覺察到的錯誤,這就是成功的測試的標(biāo)準(zhǔn)。本系統(tǒng)的測試和糾錯信息流程如圖6.1所示。 圖6-1 測試和糾錯信息流程圖 軟件測試,又稱為多模塊測試,一共有四個階段: 表6-1 測試階段的介紹表 單元測試單元測試的用例從單元詳細(xì)設(shè)計中導(dǎo)出。功能性測試與結(jié)構(gòu)性測試可用于單元測試。集成、確認(rèn)測試這一階段的任務(wù),是通過把單元測試中的各個模塊按要求整合到一起,通過調(diào)試等步驟,獲得一套可以滿足用戶需求的軟件。系統(tǒng)測試本階段中所尋找的錯誤通常是與目標(biāo)需求之間存在的差距。通常是屬于功能性測試的。 圖6-2 層次測試的信息流程圖 6.2測試用例
通過輸入關(guān)鍵字進行查詢,然后根據(jù)搜索結(jié)果判斷系統(tǒng)是否存在問題. 例:搜索“在”,反饋結(jié)果如圖6-2所示: 圖6-3 搜索結(jié)果圖1 可見搜索結(jié)果是正確的,并且關(guān)鍵字都已高亮度顯示。? 結(jié) 論 本次設(shè)計主要就是通過利用Lucene技術(shù),來實現(xiàn)搜索引擎的設(shè)計和實現(xiàn)的過程。其中用到了開源工具有MyEcipse(提供項目運行的Java環(huán)境,編寫程序空間)、sql server2008(數(shù)據(jù)庫,用戶前端展示信息的支撐,是數(shù)據(jù)的存儲地)、tomcat(服務(wù)器,用戶提交檢索請求,由它來進行接收、處理)他們分別管控的自身的部分,同時也相互協(xié)調(diào)配合,這一功能得以正常運行和實現(xiàn),是缺一不可的。 本項目是對一個基于Lucene技術(shù)的搜索引擎設(shè)計與實現(xiàn)的過程,通過開源庫Lucene的支持,快速地實現(xiàn)了海量信息的搜索功能,它不僅實現(xiàn)了文件快速查找的功能,而且還實現(xiàn)了全文搜索,還能實現(xiàn)類似百度的分詞搜索效果,效果頗佳。同時加入了數(shù)據(jù)庫處理。 該系統(tǒng)可以通過擴展或改造然后適用于站內(nèi)搜索,這樣可以使用戶快速的找到自己想瀏覽的信息,提高用戶體驗和網(wǎng)站流量。 到此搜索引擎的基本功能都已基本完成,但是還有待改進或加強的地方,例如如果把分詞做到最優(yōu)最人性化,怎樣分才是最合理,都需要進一步研究。 參 考 文 獻
李剛,宋偉,邱哲.征服Ajax+Lucene構(gòu)建搜索引擎.北京:人民郵電出版社,2006.邱哲,符滔滔.開發(fā)自己的搜索引擎-Lucene2.0+Heritrix.北京:人民郵電出版社,2007.孫承杰.基于統(tǒng)計的網(wǎng)頁正文信息抽取方法的研究.中文信息學(xué)報,2004,18(5):17-22.
http://www.
docin.com/p-1436638591.
html
基于Lucene全文檢索引擎的應(yīng)用研究與實現(xiàn).朱明.數(shù)據(jù)挖掘.合肥:中國科學(xué)技術(shù)大學(xué)出版社,2002.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.王德峰,李東.搜索引擎Google的體系結(jié)構(gòu)及其核心技術(shù)研究.哈爾濱商業(yè)大學(xué)學(xué)報(自然科學(xué)版),2006,(01).呂平.基于Ajax的IP網(wǎng)絡(luò)管理系統(tǒng)的研究與實現(xiàn):(碩士學(xué)位論文).北京:北京交通大學(xué), 2007.陳兵國.基于AJAX的網(wǎng)站設(shè)計與實現(xiàn).福建電腦,2007,(12).張校乾,金玉玲,侯麗波.一種基于Lucene檢索引擎的全文數(shù)據(jù)庫的研究與實現(xiàn).現(xiàn)代圖書情報技術(shù),2005.楊海東.基于Ajax技術(shù)的異步搜索引擎研究與實現(xiàn):(碩士學(xué)位論文).南京信息工程大學(xué),2007.周珍娟,張字平,陸玲.基于Lucene2.0的電子文獻全文檢索系統(tǒng).電腦知識與技術(shù)(學(xué)術(shù)交流),2007.朱永盛,武港山.基于Web的新聞信息抽取.計算機工程,2006,32(10):74-76.劉遷,賈惠波.中文信息處理中自動分詞技術(shù)的研究與展望.計算機工程與應(yīng)用,2006.丁承.基于字表的中文搜索引擎分詞系統(tǒng)的設(shè)計與實現(xiàn).計算機工程,2001.
致 謝
首先,我要對我的指導(dǎo)老師——李老師,表示由衷的感謝,感謝您對我的本次設(shè)計的認(rèn)真指導(dǎo),讓我受益匪淺。同時,我也要感謝我的班主任——肖老師,感謝您在這一段時間給予我無微不至的關(guān)心,無論是從論文題目的選擇,還是設(shè)計實現(xiàn)方法的選擇都給了我悉心的指導(dǎo)。當(dāng)我在課題的研究中遇到問題的時候,他們總是很熱心的為我解答,每次與老師的溝通,都會是我茅塞頓開。老師們嚴(yán)謹(jǐn)?shù)慕虒W(xué)理念和兢兢業(yè)業(yè)的工作精神,給我們這些剛剛踏入社會的新人,樹立了一個很好的榜樣。本次設(shè)計,使我獲益匪淺。 最后,我還要再次感謝在畢業(yè)設(shè)計的整個過程中,幫助我的所有領(lǐng)導(dǎo)、老師和同學(xué),沒有您們的幫助,我也不可能這么順利的完成本次設(shè)計。感謝您們給我的各方面的關(guān)心和幫助。 衷心的祝愿您們,家庭幸福美滿,事業(yè)蒸蒸日上。謝謝大家了!