如何?小型WEB搜尋引擎(C#+SQL Server全文檢索索引+Asp.net)

來源:互聯網
上載者:User
asp.net|server|sql|web|全文檢索索引|搜尋引擎

1 引言

21世紀,中國互連網搜尋引擎領域可謂群雄逐鹿,百度、Yahoo、中搜、搜狗等等都使出渾身解數吸引著網民的眼球。這些大網站可謂是各有所長,總的來說雖然他們搜尋功能都很強,但是搜尋得到的結果基本上是千篇一律,資訊的冗餘量很大,網民不得不在一次又一次的翻頁中浪費時間,或者為了想出一個好的關鍵詞而絞盡腦汁。要是有一個有針對性的搜尋引擎就好了,並且這個針對性應該是可以控制的。

2 SOSO的由來

筆者在上網搜尋的過程中曾有這樣痛苦的經曆。由於筆者愛好編程,經常需要上網尋找技術資料。但是搜到的結果往往是來自一些不起眼的小網站,它們主要是轉載CSDN,賽迪網等一些技術大站上的文檔,可惡的是,這些小網站常常轉載不全,廣告成堆,亂彈視窗,更有甚者還有病毒、木馬等防不勝防。筆者當時想,如果有一個“IT技術文檔搜尋引擎”就好了,可惜沒有,於是就自己動手做吧。我把CSDN、IT168、賽迪網等IT技術網站儲存在“被搜網站庫”中,按一定的周期啟動Spider(蜘蛛)程式(Spider的原理後面講),Spider搜到的結果按一定格式暫時存在硬碟上,然後由Carrier(搬運工)程式非同步轉存到資料庫中,再利用SQL Server強大的全文檢索索引(不是用Like語句J)結合Asp.net做出查詢介面,這便有了SOSO的原型。由於SOSO只搜特定的網站,數量少,因此資料更新的速度更快,而且由於事先對網站就有了篩選,搜到的結果品質也比較高,比用大型搜尋引擎有更好的使用者體驗。後來筆者想起校網路中心的老師曾提議做一個專門搜尋華師校內所有網站資訊的搜尋引擎,便做了Scanner程式,它的功能是檢索出給定的IP範圍內所有的網站,並把這些網站的主要資訊存入“被搜網站庫”。於是便有了“華師人自己的WEB搜尋引擎------MySOSO”,網址http://it.ccnu.edu.cn/mysoso。網站推出後受到了同學們的好評,校領導也曾在校網路建設工作會議上點名表揚。有個同學說:“以前想查一下校學生會主席的資料,用Google和Baidu搜到的結果都不理想,因為重名的太多了。有了MySOSO就好多了,搜到網頁也都是來源於校內各大網站,真實可靠。”

3 SOSO的技術說明

3.1 SOSO的工作環境

軟體環境:Windows平台(推薦Win2000,Win2003 Server)+.NET1.1 Framework + SQL Server 2000。硬體環境:伺服器一台,配置越高越好。當然有多台伺服器更好,這樣Spider可以並行地在多台機器上跑。

3.2 SOSO的基本原理

SOSO主要由五部分組成,資料庫+WebScanner+WebSpider+Carrier+Asp.net網站。

資料庫主要有三張表:被搜網站表,網頁表,關鍵詞表。被搜網站表存放著Spider要去訪問的網站的網址及其他基本資料,網頁表存放搜到的網頁的基本資料,關鍵詞表記錄使用者檢索過的關鍵詞及其頻率。資料庫裡還存放著一些預存程序,以供其它模組調用。此外,因為用到了SQL Server的全文檢索索引功能,還要建立索引檔案。

WebScanner是一個用C#編寫的基於Console的應用程式,它的作用是掃描一定IP範圍的所有網站的基本資料,並將其存入資料庫。由於採用了多線程技術,掃描是比較快的。經測試,掃描華師的IP範圍202.114.32.1~202.114.47.255,得到89個網站只用了45秒。

WebSpider是一個用C#編寫的基於Console的應用程式,它的作用是訪問資料庫中給出的網站,並把網站的網頁抓取下來,抓取的原理是利用Regex(可以適應各種網頁),筆記經心設計了一個WebPage類,它可擷取給定網址的網頁的所有連結、站內連結,連結文字、純文字、網頁大小、標題等等一系列資訊。獲得的網頁資訊資料放入記憶體中的一個全域資料隊列結構,而全域資料隊列每隔一定周期被序列化後以檔案的形式存於硬碟上,並將自身清空。WebSpider的內部採用了多線程技術,每個線程維護自己的廣度優先遍曆隊列,因此速度非常快,經華師校內測試,每分鐘平均抓取1,050張網頁。此外,還可以在設定檔中設定Spider的同時最大並發線程、線程生存周期、搜尋深度、資料序列化周期、特定網站過濾等參數。

Carrier是個批次檔,它的作用是把WebSpider輸出的序列化的資料從硬碟“搬”到資料庫中。那麼為什麼WebSpider不直接把資料插到資料庫裡面呢?因為SQL Server在接收大量資料插入請求時,效率會下降,前台Asp.net網站的查詢效率就會下降,查詢時間變長。因此筆者在設計時採用了非同步模式,WebSpider只負責收集資料,Carrier來負責資料插入資料庫,這樣通過合理的時間調度就可以避免瓶頸的出現。這種非同步工作模式在有多台電腦運行WebSpider時優勢將更加明顯。

搜尋網站是用Asp.net開發的,基本原理相信做過網站的人都知道。SOSO的亮點體現在三個地方。首先是對關鍵詞分詞的處理。由於筆者對這方面的演算法研究不深,因此用了Split()加上SQL Server的FreeText功能實現了模糊查詢。基本原理是這樣的,比如說,當使用者查詢“劉德華天王  mp3”時,首先以與邏輯即contains“劉德華天王 and mp3”進行查詢,如果無記錄,則用或邏輯查詢即contains“劉德華天王 or  mp3”。如果還是無記錄,則用SQL Server的FreeText進行分詞,可能返回匹配“劉德華”,“天王”,”mp3”當中任意一個詞的記錄,並且按照相關度的高低排序。其次,此網站的分頁演算法採用了“按需索取”的原則,即每次只從資料庫中讀取第m條到第m+pagesize-1條資料,因此查詢速度還是比較可觀的。關鍵詞著色上也做了一些小技巧,以前被搜過的關鍵詞的著色正則式會被先行編譯存在Application全域變數中,因此其它人再搜這個詞時速度就很快了。最後要提一下網頁右邊那一欄,目前放的是校內新聞,它本質上是讀取了一個RSS源並顯示出來。這個RSS源是我做個另一個系統,它收集本校五大門戶網站的新聞並以xml的形式顯示。

華中師範大學資訊技術系 SunJoy   ccnusjy@gmail.com



聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.