日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > C# >内容正文

C#

【转】如何实现小型WEB搜索引擎(C# SQL Server全文检索 Asp.net)

發(fā)布時間:2024/1/8 C# 49 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【转】如何实现小型WEB搜索引擎(C# SQL Server全文检索 Asp.net) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.



SOSO-----為您量身定做的 WEB搜索引擎

1 引言

21世紀,中國互聯(lián)網(wǎng)搜索引擎領(lǐng)域可謂群雄逐鹿,百度、Yahoo、中搜、搜狗等等都使出渾身解數(shù)吸引著網(wǎng)民的眼球。這些大網(wǎng)站可謂是各有所長,總的來說雖然他們搜索功能都很強,但是搜索得到的結(jié)果基本上是千篇一律,信息的冗余量很大,網(wǎng)民不得不在一次又一次的翻頁中浪費時間,或者為了想出一個好的關(guān)鍵詞而絞盡腦汁。要是有一個有針對性的搜索引擎就好了,并且這個針對性應(yīng)該是可以控制的。

2 SOSO的由來

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

3 SOSO的技術(shù)說明

3.1 SOSO的工作環(huán)境

軟件環(huán)境:Windows平臺(推薦Win2000,Win2003 Server)+.NET1.1 Framework + SQL Server 2000。硬件環(huán)境:服務(wù)器一臺,配置越高越好。當(dāng)然有多臺服務(wù)器更好,這樣Spider可以并行地在多臺機器上跑。

3.2 SOSO的基本原理

SOSO主要由五部分組成,數(shù)據(jù)庫+WebScanner+WebSpider+Carrier+Asp.net網(wǎng)站。

數(shù)據(jù)庫主要有三張表:被搜網(wǎng)站表,網(wǎng)頁表,關(guān)鍵詞表。被搜網(wǎng)站表存放著Spider要去訪問的網(wǎng)站的網(wǎng)址及其他基本信息,網(wǎng)頁表存放搜到的網(wǎng)頁的基本信息,關(guān)鍵詞表記錄用戶檢索過的關(guān)鍵詞及其頻率。數(shù)據(jù)庫里還存放著一些存儲過程,以供其它模塊調(diào)用。此外,因為用到了SQL Server的全文檢索功能,還要創(chuàng)建索引文件。

WebScanner是一個用C#編寫的基于Console的應(yīng)用程序,它的作用是掃描一定IP范圍的所有網(wǎng)站的基本信息,并將其存入數(shù)據(jù)庫。由于采用了多線程技術(shù),掃描是比較快的。經(jīng)測試,掃描華師的IP范圍202.114.32.1~202.114.47.255,得到89個網(wǎng)站只用了45秒。

WebSpider是一個用C#編寫的基于Console的應(yīng)用程序,它的作用是訪問數(shù)據(jù)庫中給出的網(wǎng)站,并把網(wǎng)站的網(wǎng)頁抓取下來,抓取的原理是利用正則表達式(可以適應(yīng)各種網(wǎng)頁),筆記經(jīng)心設(shè)計了一個WebPage類,它可獲取給定網(wǎng)址的網(wǎng)頁的所有鏈接、站內(nèi)鏈接,鏈接文字、純文本、網(wǎng)頁大小、標(biāo)題等等一系列信息。獲得的網(wǎng)頁信息數(shù)據(jù)放入內(nèi)存中的一個全局數(shù)據(jù)隊列結(jié)構(gòu),而全局數(shù)據(jù)隊列每隔一定周期被序列化后以文件的形式存于硬盤上,并將自身清空。WebSpider的內(nèi)部采用了多線程技術(shù),每個線程維護自己的廣度優(yōu)先遍歷隊列,因此速度非常快,經(jīng)華師校內(nèi)測試,每分鐘平均抓取1,050張網(wǎng)頁。此外,還可以在配置文件中設(shè)定Spider的同時最大并發(fā)線程、線程生存周期、搜索深度、數(shù)據(jù)序列化周期、特定網(wǎng)站過濾等參數(shù)。

Carrier是個批處理文件,它的作用是把WebSpider輸出的序列化的數(shù)據(jù)從硬盤“搬”到數(shù)據(jù)庫中。那么為什么WebSpider不直接把數(shù)據(jù)插到數(shù)據(jù)庫里面呢?因為SQL Server在接收大量數(shù)據(jù)插入請求時,效率會下降,前臺Asp.net網(wǎng)站的查詢效率就會下降,查詢時間變長。因此筆者在設(shè)計時采用了異步模式,WebSpider只負責(zé)收集數(shù)據(jù),Carrier來負責(zé)數(shù)據(jù)插入數(shù)據(jù)庫,這樣通過合理的時間調(diào)度就可以避免瓶頸的出現(xiàn)。這種異步工作模式在有多臺計算機運行WebSpider時優(yōu)勢將更加明顯。

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

~~~~~~~~~~~~~~~``累了

未完待續(xù)。

??????????????????????????????? 華中師范大學(xué)信息技術(shù)系 SunJoy?? ccnusjy@gmail.com

呵呵,順便推廣告一下我做的另一個網(wǎng)站教育網(wǎng)FTP搜索引擎http://so.javaye.com

關(guān)心華師的朋友可以訂閱華師新聞RSS http://it.ccnu.edu.cn/ccnurss


推薦文章:
1. 數(shù)據(jù)挖掘相關(guān)的10個問題
2. 數(shù)據(jù)挖掘 理論和實際
3. 什么是數(shù)據(jù)挖掘
4. 空間數(shù)據(jù)挖掘
5. 網(wǎng)站的數(shù)據(jù)挖掘
6. 數(shù)據(jù)挖掘的基本知識
7. CIO調(diào)查:數(shù)據(jù)挖掘并不遙遠
8. 微軟BI系列
9. 學(xué)習(xí)系統(tǒng)數(shù)據(jù)挖掘功能
10. 博客網(wǎng)數(shù)據(jù)挖掘的有關(guān)設(shè)想(轉(zhuǎn)自吳波博客)

轉(zhuǎn)載于:https://www.cnblogs.com/ae6623/archive/2011/01/09/4416907.html

總結(jié)

以上是生活随笔為你收集整理的【转】如何实现小型WEB搜索引擎(C# SQL Server全文检索 Asp.net)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。