文章寫得比較淺顯(主要是個人水準有限),大家可以讀來消遣排磚。^^
第一篇 系統需求和概要設計
二、 系統設計:
對于搜尋系統其主要子產品包括:抓取、儲存、索引、查找四個部分。

以下我們逐個分析。
1. 抓取。抓取指的是擷取Ftp伺服器内容的過程。其本質是圖的的周遊。其設計主要包含以下幾個方面:
b) Ftp伺服器的周遊。FtpSearch采用深度優先周遊算法,對于圖上的一個節點,(一個伺服器),我們可以将其視為一個N叉樹。忽略伺服器之間的連接配接,整個Ftp伺服器網絡即可視為一個森林。我們對每一個伺服器用一個線程進行周遊,提供NewFileFound、ExpectionOccur等事件,用于新檔案發現、發生錯誤等進行處理。在此,伺服器是一個稍微抽象一點的概念,指的是目标伺服器上的要周遊目錄的集合。 c) 錯誤處理。對于搜尋引擎來說,通路網絡錯誤,比如Url無效或者伺服器逾時來說,都不應該算是Exception,應該視為一種正常的情況予以處理。在FtpSearch中,我将異常分為兩類,一類是緻命異常(FetalExecption),指的是伺服器逾時、線程死鎖等無法繼續進行的錯誤,其主要的處理方式是重新啟動線程并嘗試,超過一定嘗試次數則是為無效位址予以報告(觸發事件)。第二類是普通異常(CommonException),主要是指某個目錄無法通路,主要的處理方式是跳過此目錄繼續周遊。對于任何一種異常,Robot(網絡機器人,又稱為Spider、蜘蛛、爬蟲……)都出發一個事件、可以有由更高層改變處理邏輯。
2. 儲存:儲存主要是指對于原始資料的儲存,在FtpSearch中即為搜尋到的檔案的資訊,包括Url,Name,LastModifyTime,Server等。在我的設計中使用的是MS SQLServer 2000。對于大概100K資料來說應該不是很吃力。
3. 索引:索引是搜尋中非常重要的核心部分。其主要設計一下部分:
a) 索引方式:目前大部分的索引使用的是基于關鍵字的反向索引。詳細資訊Google一把能出一打。 b) 分詞:分詞是很重要的一部分,特别是中文的分詞。目前比較簡單的分詞是二分法分詞,簡單點說就是兩個字一份。中文二字詞最多,是以這個方法還是比較有效的。更好一些的算法,特别是在保證速度的前提下的算法就是很專業的問題了。中科院有個分詞項目,ICTCLAS,開源的,而且提供各個語言的程式設計接口,算是國粹了。 c) 進階功能:指的是比對程度的得分、多字段聯合查詢等。 FtpSearch中用的是著名的DotLucene(Lucene的.Net版本)。具體的使用方法可以到網上查找,另外說一下,就算不作搜尋引擎,而牽扯到資料的搜尋的問題,Lucene都能給你不一樣的感覺(不是廣告^^)。
4. 查找:查找主要是指對于使用者提供一組接口,提供查詢服務,在此基礎上可以建構WebSite、WebServies等。
本文轉自冬冬部落格園部落格,原文連結:http://www.cnblogs.com/yuandong/archive/2006/06/26/436395.html,如需轉載請自行聯系原作者