【转】如何实现小型WEB搜索引擎(C# SQL Server全文检索 Asp.net)
SOSO-----為您量身定做的 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的應用程序,它的作用是訪問數據庫中給出的網站,并把網站的網頁抓取下來,抓取的原理是利用正則表達式(可以適應各種網頁),筆記經心設計了一個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
呵呵,順便推廣告一下我做的另一個網站教育網FTP搜索引擎http://so.javaye.com
關心華師的朋友可以訂閱華師新聞RSS http://it.ccnu.edu.cn/ccnurss
推薦文章:
1. 數據挖掘相關的10個問題
2. 數據挖掘 理論和實際
3. 什么是數據挖掘
4. 空間數據挖掘
5. 網站的數據挖掘
6. 數據挖掘的基本知識
7. CIO調查:數據挖掘并不遙遠
8. 微軟BI系列
9. 學習系統數據挖掘功能
10. 博客網數據挖掘的有關設想(轉自吳波博客)
轉載于:https://www.cnblogs.com/ae6623/archive/2011/01/09/4416907.html
總結
以上是生活随笔為你收集整理的【转】如何实现小型WEB搜索引擎(C# SQL Server全文检索 Asp.net)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 局域网搭建php_phpstudy8.0
- 下一篇: 难忘的三件苦差事