1. 程式人生 > >[轉]FTP搜尋引擎的設計與實現(優化版)

[轉]FTP搜尋引擎的設計與實現(優化版)

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow

也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!

                  

 

FTP搜尋引擎的設計與實現(優化版)

By falcon

摘要:FTP是因特網最主要的服務之一,FTP搜尋引擎為資源共享提供了極大的方便。本文分析和設計了一個基於WEB的FTP搜尋引擎,在ASP+ACCESS+VB環境下給出了程式設計實現,並體現了具體實踐中總結出的一些經驗。

關鍵詞:FTP;搜尋引擎;ASP;ACCESS;SQL;VB

引言

  FTP是因特網最主要的服務之一,在FTP伺服器上儲存有大量的各種各樣的共享軟體、技術資料和多媒體資料等檔案。由於FTP伺服器上的檔案組織結構比較複雜,而且檔案分佈不一定有規律,因此想很快的找到自己需要的資源比較困難。基於WEB的FTP搜尋引擎可以很好的解決上述問題。目前,國內外有很多 FTP搜尋引擎,國內高校中做得比較出色的有天網資源搜尋(北大)、歪酷搜尋(復旦)、星空搜尋(清華)。如果能夠打造一個我校自己的FTP搜尋引擎,將極大的方便校園網使用者共享FTP資源,進而對校園網的發展作出巨大的貢獻。

正文

1.FTP搜尋引擎的結構

  FTP搜尋引擎由資料採集、資料查詢、資料管理和維護三大核心模組組成。實現一個FTP搜尋引擎,首先要獲得FTP伺服器上的檔案資訊,並儲存到資料庫中;然後為使用者提供一個查詢介面,通過把使用者提交的關鍵字轉化成資料庫查詢語言,從庫中獲取匹配的檔案資訊,並以友好的介面返回給使用者。另外,為了保持資料庫和伺服器資訊的同步更新、保證庫中資料量等,引入資料管理和維護的功能模組。下面是FTP搜尋引擎的結構圖示:

使用的相關軟體和語言說明:
作業系統:Windows XP
WEB伺服器:IIS
資料庫查詢語言:SQL
資料庫系統:ACCESS
WEB頁程式語言:html+asp+javascript
資料採集工具程式語言:VB。

2. 資料庫結構的分析和設計

  從FTP搜尋引擎的結構圖示中不難看出,資料庫是整個系統的核心部分。它是三大功能模組設計的基礎。下面先對三個模組和資料庫之間的關係進行一定的分析。
資料採集模組需要通過訪問FTP伺服器獲取檔案資訊,那麼不難想到把FTP站點資訊和檔案資訊儲存到資料庫中。另外資料查詢模組的主要操作物件也正好是檔案資訊,因此需要訪問資料庫。另外,為了方便使用者更好的查詢,引入關鍵字統計等模組並把統計資訊儲存到資料庫中。而資料管理和維護的物件涉及對站點資訊的更新以及檔案資訊與伺服器的同步,比如新增刪除站點,重新獲取FTP伺服器的檔案資訊等,也涉及到資料庫的操作。
下面就檔案資訊、站點資訊、關鍵字統計資訊等幾個方面考慮資料庫的設計。

2.1檔案資訊分析

  在FTP伺服器上,檔案系統都是樹形結構的,其中包括目錄和檔案,而每個檔案包括檔名(隱含型別)、檔案地址、檔案大小、日期等資訊,其中最為重要的資訊莫過於檔案地址,使用者通過它可以進行下載等操作。據此,我們可以設計出檔案資訊表,但是出於對資料庫冗餘度,以及必要的優化等方面考慮,我們先從檔案系統結構、檔案資訊的自身性質等進行進一步分析。
1)檔案系統的結構是樹形的,我們必須設法把它轉換成現在流行的關係資料庫中的表結構。
2)如果每個檔案的URL地址都儲存到一個欄位中,那麼將由於他們有相同的目錄而產生極大的資料冗餘。因此應該設法把冗餘度降低。
3)通常要獲得的是檔案而非目錄。因此可以設想把檔案和目錄儲存到不同的表中。
4)由於檔案一般都由檔案字尾來指定檔案型別,因此可以據此設定一個型別欄位來對檔案進行分類,甚至可以據此把檔案表劃分成更細的表。
通過分析後不難想到引入類似靜態連結串列中的遊標來建立樹形結構和表結構的聯絡,於是,我們設計出這樣的表結構:(目前只劃分為【目錄表】和【檔案表】來存放檔案資訊)
【目錄表】:cat_tab
欄位名   欄位型別
目錄編號(id)   Integer
目錄名(cat)   Text(50)
父目錄編號(pid)   Integer
所屬IP站點編號(ipid)   Integer
訪問次數(acctime)   long
這裡的id和pid實現了類似靜態連結串列中的遊標,極大的優化了資料庫,而且使得查詢操作更加方便。而ipid是該表和站點表之間的關係欄位,指定目錄所屬的站點,至於訪問次數,是為了使得查詢返回結果更人性化,下同。
【檔案表】:file_tab
欄位名   欄位型別
檔名(file)   Text(50)
字尾(postfix)   Text(4)
父目錄編號(pid)   Integer
所屬IP站點編號(ipid)   Integer
訪問次數(acctime)   long
這裡的pid指向目錄表中的id,據此建立檔案表目錄表之間的聯絡。

2.2 FTP站點資訊分析

  一個FTP站點通常包括伺服器名(域名或者IP)、開放的埠號、使用者名稱和密碼、站點說明資訊等。儲存FTP站點資訊表的結構具體設計如下:
【站點表】:site_tab
欄位名   欄位型別
IP編號(id)   Integer
站點地址(site)   Text(15)
埠(port),預設為21埠   Integer
登陸使用者名稱(user),預設為anonymous   Text(10)
登陸密碼(pw),預設為

[email protected]   Text(10)
當前是否可以訪問(acc)   Boolean
該站資料是否已經入庫(indb)   Boolean
站點說明資訊(info)   備註型
“當前是否可以訪問”欄位,是為資料管理和維護模組以及資料查詢模組設計的,前者通過“站點連線測試”獲取該資訊,而資料查詢模組據此判斷是否返回該站點的資訊給使用者,從而保證返回結果的有效性。而該站點資料是否入庫與是否可訪問資訊結合起來作為查詢的ipid(站點id編號)的域。另外,它可以為資料採集時是否還需要採集該站點資料作依據。

2.3 關鍵字統計資訊分析

  經過實踐發現,對關鍵字的統計非常重要,它可以幫助使用者更好的查詢。該資訊可以單獨提供給使用者訪問,也可以在使用者每次訪問時把類似的關鍵字資訊顯示給使用者,讓使用者通過對比觀察其他使用者查詢的關鍵字而找到更好的查詢辦法。目前該表只設置關鍵字資訊和被成功搜尋次數資訊。
【關鍵字統計表】key_tab
欄位名   欄位型別
關鍵字(key)   Text(25)
訪問次數(acctime)   Long

2.4資料庫結構設計

經過分析和初步的設計,我們的資料庫基本成型。它包括四個表,分別是【目錄表】、【檔案表】、【站點表】、【關鍵字表】,表名分別為cat_tab, file_tab,site_tab,key_tab。出於系統整體風格的考慮,所有的命名全部採用小寫以及特殊檔名命名的見名知義原則。另外該資料庫的名字根據站點的名字而來,取為falcon_search.mdb,為了在資料庫安全方面的考慮,實際命名為#falcon_search.asp。

3. 資料採集

  要構建FTP搜尋引擎,必須通過自動方式採集FTP伺服器上的檔案資訊,並以相對完善的格式儲存到上面設計好的資料庫中。這個過程大體如下:
該模組先從站點表中獲取站點的必須資訊進行站點登陸、遍歷等操作,與此同時接收FTP站點返回的檔案資訊,並進行一定的優化後把目錄和檔案分別儲存到目錄表和檔案表中,另外在資料入庫後把站點表中是否入庫標記置為真。這裡涉及到兩個個子核心模組:站點遍歷以及資料過濾。
前者可以通過站點遍歷過程實現(可以是遞迴的,也可以用堆疊實現的非遞迴過程);而後者的資料過濾涉及到對大量站點資料的統計分析後才能做出妥善的安排,從而為提高整個站點的效能做出非常大的貢獻,比如,過濾掉一些“黃色”字眼可以淨化網路環境,過濾掉垃圾檔案可以精簡資料庫的到小並且使得使用者能夠獲得儘可能滿足要求的資訊,而對某些特殊的檔名進行過濾不但可以壓縮資料庫,而且可以提高訪問效率。比如,沒有意義的檔名(如純數字的),使用者永遠都不會去查詢即使查詢到也不知道該檔案是否滿足需要,因此把這類檔案資訊過濾掉也相當重要,不過,它們所處的目錄命名往往是有意義的,因此保留目錄資訊不但可以方便使用者查詢到相關資訊,而且上面過濾掉的檔案資訊實質上依然可以為使用者所利用,即可以通過它們所在的目錄訪問到。
  下面先把資料採集的演算法用自然語言描述如下:
資料採集過程{
    從庫中讀取站點資訊;
    登陸站點並遍歷;
    接收返回資訊並過濾;
    資料入庫;
}
然後我們具體分析每個細節:

3.1從庫中讀取站點資訊

這裡我們需要設計一個數據結構來儲存站點資料,設計時完全參照表中的相關欄位設定。下面主要介紹VB連線資料庫的操作,以及記錄型資料的設計。
A,VB連線資料庫:
先引用Microsoft DAO 3.6 Object Library,然後就可以通過下面的程式碼實現對Access的連線。
Set mydb = DBEngine.OpenDatabase(“資料庫的絕對路徑”)
至於執行sql語句,可以這樣實現:
Set myrs = mydb.OpenRecordset(sql語句)
B,記錄型資料的設計:
我們來設計一個存放每個站點資訊的記錄型資料結構:
Const siteLen = 15
Const userLen = 10
Const pwLen = 10
Const infoLen = 1000
Public Type siteStructure
Id As Integer
Site As String * siteLen
Port As Integer
User As String * userLen
Pw As String * pwLen
Acc As Boolean
Indb As Boolean
Info As String * infoLen
End Type
注:上面聲明瞭一些常量,目的是為了方便日後的系統的維護。

3.2登陸站點和遍歷以及資料過濾

實際操作過程中,我們把“站點遍歷”和“資料接收“放到一起考慮。為什麼把它們放在一起呢?因為遍歷的過程也是接收資料的過程,它們並不是純粹的順序關係,而是並行關係。該部分是資料採集過程的核心。因此需要詳細的分析。
為了實現站點的登陸和遍歷,我們有兩種實現方案。
方案一,可以使用vb6.0提供的Winsock控制元件,它提供了基於TCP協議的套接字連線,可以通過它實現ftp協議,而我們要做的僅僅是實現ftp協議客戶端,並且只需實現登陸、傳送list命令和接收返回資訊即可。
方案二,vb6.0也提供了一個更高階的internet transfer control6.0,該控制元件使得底層的ftp協議透明化,我們無需知道ftp協議的底層實現過程就可以通過它進行類似dos下ftp命令操作。用dir 命令就可以實現對對方目錄的檔案列表操作,而且可以在該控制元件的狀態改變事件中判斷狀態並在合適狀態下接收資料。
通過分析,不難發現,兩者都可以實現我們的需求。前者在操作控制方面比後者麻煩,些,不過比後者靈活,比如超時控制更自由。而且前者有個優點,容易通過load(裝載)多個控制元件來實現多執行緒。
為了設計的方便,我們這裡採取第二個方案。我們把這“站點遍歷”和“資料接收”分成兩個過程來考慮。站點登陸和遍歷過程實際上是一個命令傳送過程,而後面的接收資料和資料過程可以放到控制元件的狀態改變過程中實現。兩個過程的細化如下:
命令傳送過程{
  (登陸並進入伺服器的根目錄)
  通過遞迴實現進入子目錄,直到遍歷完所有目錄
  (通過引入堆疊來實現非遞迴演算法,後序遍歷樹)
}
  控制元件的狀態改變過程{
  判斷伺服器是否響應完成,如果是執行下面操作:
    接收資料
    資料過濾
    資料存入臨時變數中
}
同樣,為了儲存每個檔案的資訊,我們得設計一個存放檔案的記錄型資料。每個檔案包括檔案編號、父目錄編號、檔名(或目錄名)、檔案字尾(目錄字尾為” /”,檔案字尾從檔名拆分出來)、檔案深度(指所處檔案系統中目錄的層次,這是為了便於遍歷而設定,並不入庫)另外,為了實現非遞迴,我們設計一個堆疊來存放遍歷過程中的目錄,為了儲存最終的結果,我們設計一個數組(即上面提到的臨時變數)來存放。由於目錄個數和檔案資訊總量的預先不可估量,我們採取動態陣列來實現它們。
  這裡記錄型資料的設計同3.1,這裡介紹一下VB中動態宣告資料的方法:
先通過Dim定義一個空的陣列,然後通過Redim重新定義,如:
Dim TestArray() as string ‘以前的宣告
Redim preserve TestArray(陣列大小) as string ‘重新宣告

現在,我們來設計資料過濾方案:
資料過濾在介紹資料採集過程時有了初步的介紹,總結一下,我們分幾個級別來進行過濾:
第一級別,不區分檔案和目錄,我們過濾掉所有包含有特定字眼的資訊,如黃色、色情等;過濾掉那些長度超過資料庫中定義的相關欄位最大長度的資訊。
第二級別,過濾某些目錄,比如bin/,Program Files/,新建資料夾/等,其中包含的資訊,往往並不是人們需要的。
過濾掉某些檔案,其中有一個辦法就是通過後綴過濾掉好多檔案,另外,也可以通過檔名來過濾,比如readme,新建 Microsoft Word 文件,新建 文字文件等,他們通常也是一無所用的。
第三級別,前兩個級別都是在資料過濾階段進行,但是這個級別是資料入庫之前。這裡也是為了過濾掉某些檔案,但是這些檔案有一些特別:只是它們的命名沒有任何意義。比如純數字命名,但是它們的目錄往往是非常有用的,所以它們自身被過濾掉,而目錄保留下來。
到目前為止,資料過濾就差不多拉,完全可以通過ini檔案來儲存某些要過濾的檔案,或者需要保留的檔案,從而使得程式具有很好的擴充性。
現在介紹一下Microsoft internet transfer控制元件登入FTP站點時涉及的一些操作:
我們先通過新增component來匯入該元件,並新增到窗體中,命名為inet1
1),資料採集過程部分
A,在命令傳送之前,我們得進行一些初始化操作。
Inet1.URL ‘ftp站點的Url地址
Inet1.RemotePort ‘ftp站點開放的埠號
Inet1.UserName ‘登入使用者名稱
Inet1.Password ‘登入密碼
而在窗體初始化的時候,初始化下面兩個屬性
Inet1.Protocol = icFTP ‘使用的網路協議
Inet1.AccessType = icUseDefault ‘是否直接連線,這裡選擇預設,即使用當前IE的設定。
現在介紹命令傳送:
Inet1.execute ,“cd ” & “目錄”
Inet1.execute ,“dir ”
我們可以通過該控制元件的execute方執行cd和dir命令來實現登陸FTP以及資料遍歷操作。
B,控制元件狀態接收端,我們可以在該控制元件的狀態改變事件觸發過程中判斷狀態,並在適當時候接收資料和處理資料。
Private Sub Inet1_StateChanged(ByVal State As Integer)
Dim filelistTmp as string,filelistArray() as string
If State = 12 Then
filelistTmp = Inet1.GetChunk(0) ‘這裡filelistTmp用來接收檔案列表資訊
  fileArray = Split(filelistTmp, vbCrLf) ‘由於接收到的資料是用換行符分割著的,這樣我們用分割函式就可以取得每個檔名
    ‘這裡進行進一步的處理,包括資料過濾資料以及存入臨時變數等操作
  end if
  end sub
2),資料過濾
我們採取的三種方案都是沒有經過仔細的統計分析後做出的,所以可能存在這樣的問題:即剔除了某些重要的檔案資訊。但是權衡利弊後,我們發現:它對資料庫的資訊的壓縮和優化來說起到了非常重要的作用。因此,目前需要改進的是在對大量站點資訊進行統計分析以及對其他一些相關工作(比如“命名學“方面的知識等)進行學習和研究後得出更科學的過濾方案。但是過濾措施的提出似乎是一個“創舉”。我們可以從另外一個角度減少建設搜尋引擎站點的成本。
至於具體的實現可以檢視原始碼,其實只進行了比較簡單的比較和判斷操作。具體實現時把上面的幾個不同級別的過濾方法寫到一個過程里拉。目的是為了日後程式的維護。

3.3資料入庫

這裡主要是把經過過濾和優化後的資料,即把臨時變數中的資料儲存到資料庫中。這裡同樣涉及連線資料庫和sql語句的執行,具體同3.1。但是操作是比較方便的,原因是臨時變數的結構和資料庫中表的結構非常類似。
它主要涉及到對原有站點記錄的刪除操作,可以通過myrs.delete和myrs.update來實現;另外還涉及資料的追加操作,可以通過myrs.addnew和myrs.update來實現。
最後這裡有個需要注意的問題:就是在執行記錄刪除操作後,庫的大小並不會因此而變小,而需要你進行資料庫壓縮後才會真正釋放掉空間,因此我們在每次執行刪除記錄操作後專門通過DBEngine.CompactDatabase方法來實現。

至此資料採集過程分析完畢,具體程式碼參見源程式。

4. 資料查詢

  通過資料採集我們獲得了查詢需要的資料,下面將具體分析和實現資料查詢模組。
資料查詢主要包括查詢頁面的設計、查詢程式的編寫和查詢結果的返回以及關鍵字統計等。查詢頁面由Web伺服器提供,用於收集所要查詢的檔案資訊,使用者瀏覽到此Web頁面,填寫並提交表單。為減少Web伺服器的工作量,提交時由客戶端對關鍵字進行過濾。表單中需包含檔名資訊,另外為方便使用者查詢特定型別的檔案,設定一個下拉選單供使用者選擇檔案型別。表單提交給Web伺服器之後,由查詢程式進行分析,生成查詢語句並執行查詢操作,查詢結果由查詢程式進行統計分析,並按搜尋次數排序、以分頁的方式返回給使用者瀏覽。查詢結果主要包含檔案在第三方伺服器上的符號連結地址,以及相關關鍵字等資訊。另外,查詢結果的統計資訊儲存到關鍵字統計表中。與此同時,還可以據此更新目錄表和檔案表中的搜尋次數字段。
資料查詢的具體過程圖示如下:

下面詳細分析和設計WEB提交頁面和查詢程式。

4.1 WEB提交頁面的設計

經過對常用搜索引擎的分析,發現提交頁面都非常簡單實用,我們的做法也是這樣。下面是我們的提交頁面:
通過上面的圖片,我們看到提交內容的地方只有三個:關鍵字輸入文字框、檔案型別選擇下拉框、以及搜尋設定複選框。我們就這三個表單元素的作用進行分析。
A,關鍵字輸入框:這裡是使用者輸入搜尋關鍵字的地方,使用者可以輸入單個或者多個關鍵字,另外可以進行模式匹配操作,例如,可以輸入“mp3:童年”來搜尋檔名為童年的mp3。
B,檔案型別選擇框: 通過這裡使用者可以縮小搜尋範圍,從而找到更滿足自己要求的檔案。這裡需要詳細解釋一下具體的分類情況。
全部:包括所有的目錄和檔案,需搜尋目錄表和檔案表
目錄:只包括目錄,僅搜尋目錄表
一下只搜尋檔案表,根據檔案字尾分類(這裡的分類是可以擴充套件)
圖片:jpg,gif,bmp,ico
影音:mp3,rm,wav,wma,mid,wmv,rmvb,mpg,swf,avi,asf
壓縮:rar,zip,iso,tar,gz,tgz,tbz,bz2
文件:txt,doc,htm,html,pdf,ppt,chm,pdg
軟體:exe,rpm,bin
原始碼:c,cpp,java,asm
其他:dll,w3x,conf等
C,搜尋設定:為了保證搜尋結果是有效的,所以設定該項非常有用。它可以儘量保證結果的有效性。
表單的內容設定好以後,就涉及到提交過程拉,提交過程是這樣的:
使用者單擊提交按鈕或者按下{Enter}鍵,觸發提交事件,並使網頁轉向表單的action屬性所指向的查詢程式所在頁面。
為了減輕WEB伺服器的一些負擔,我們在客戶端通過javascript或者vbscript來對使用者輸入的關鍵字進行一定的過濾。比如,過濾掉空串、不雅、以及常見字或者詞語。

4.2 查詢程式

通過資料查詢過程圖示可以看出,“查詢程式”是整個“資料查詢”模組的核心。而查詢程式本身包括幾個大的方面:接收提交頁面提交的資訊;將接收的資訊進行區分和處理並轉換成查詢語句;連線資料庫並執行查詢語句進行查詢操作;對查詢結果進行分頁處理和統計分析;將結果返回給使用者。
為了能夠比較透明的描述查詢程式,先看看查詢結果頁面。

可以看出,這裡具體包括查詢提交模組、使用者搜尋的設定以及搜尋結果總數、頁數,查詢過程耗費的時間以及返回給使用者的檔案資訊,另外還有相關搜尋的顯示等。
由於涉及到的內容比較多,我們這裡只簡單介紹幾個最關鍵的地方,詳細情況參看原始碼:
第一部分,時間統計部分,該部分其實只需要在連線資料庫之前先設定一個時間變數,記為SearchStartTime用系統時鐘Timer賦值,然後在執行完查詢語句後用當前的時鐘減去SearchStartTime就可以拉。
第二部分,從關鍵字的接收、查詢語句的生成、連線資料庫並執行查詢語句、通過分頁返回結果、關鍵字的統計幾個方面來介紹。
1)關鍵字的接收有兩種方法:
如果查詢提交頁面中的表單方法屬性設成get即method=get。假如我們要接收關鍵字資訊,並設提交頁面的相應表單元素名為key,那麼可以在結果返回頁面(我們命名為search.asp)中用request.querystring(“key”).value來取得。
如果查詢提交頁面中的表單方法屬性設成post即method=post,那麼可以在結果返回頁面中用request.form(“key”).value來取得。
2)關鍵字的處理與查詢語句的生成
A,多關鍵字的處理
我們通過asp中的一個分割函式把包含空格的關鍵字拆分成多個,然後生成查詢語句中條件。
B,根據不同的分類來查詢不同的表或者不同的欄位
之前我們得接收“檔案型別”引數,並且定義一個數組,分別存放不同“檔案型別”引數對應的檔案字尾。然後根據“檔案型別”引數的不同取值並結合上面得到的查詢條件來生成不同的查詢語句。
當檔案型別為“全部”時,需要聯合查詢目錄表和檔案表。用到SQL查詢中的聯合查詢技術。
另外,在查詢檔案表中不同的類時,還需要用in來限定查詢的檔案字尾的範圍。
C,根據接收的“搜尋設定”的值來決定是否訪問站點表,來獲取當前開機的ftp站點編號來限定訪問目錄表和檔案表中對應編號,從而加強上面得到的查詢語句的條件。
到這裡查詢語句就可以生成拉。
另外,上面提到了模式匹配。這裡可以通過分析關鍵字中是否包含“:”解析一個“檔案型別”值,從而和上面的根據“檔案型別”生成查詢語句一樣進行處理。
3)連線資料庫和執行查詢語句
在asp中一個比較好的連線資料庫的方法是DAO連線:
Set conn = Server.CreateObject("ADODB.Connection")
conn.Open "driver={Microsoft Access Driver (*.mdb)};dbq="+Server.MapPath("庫名")
driver是驅動器引數,而dbq是資料庫所在的絕對路徑,通過Server物件的mappath以及當前路徑就可以獲得。
至於執行查詢語句,就這麼簡單
set rs = Server.CreateObject("ADODB.Recordset")
rs.open 查詢語句(這裡是我們在上面生成的查詢語句)
4)資料返回和分頁顯示
這裡涉及到查詢的效率問題,通過總結分析Asp優化的方法以及具體實現,發現先用set方法把記錄放到記憶體變數中能有效提高搜尋的效率,如:set id=rs(id欄位的編號)
然後直接可以在後面通過使用id的值來使用該記錄資訊。
而分頁的設定也有好多措施,但是原理大都一樣,我們只介紹具體使用到的分頁技術中的一些主要引數:
rs.PageSize 設定每頁的記錄數  
rs.PageCount 總的頁數
rs.CacheSize 設定頁緩衝區
5)相關搜尋顯示以及統計分析
相關搜尋是通過訪問統計表,查找出與當前查詢的關鍵字近似的關鍵字資訊。
而統計分析是通過當前查詢的關鍵字來更新關鍵字統計表。
6)實踐過程中引入的一個比較重要的技術
在返回的結果中,提供給使用者的連線並不是某個檔案或者目錄的url地址,而是它在資料庫中的索引資訊,即檔案的父目錄編號和所屬的站點編號。而這些資訊全部存放在目錄表中。這樣做有兩個非常大的好處:能夠很好的提高搜尋效率,而且減少伺服器的工作量。
如果返回的結果中就是檔案的url地址,那麼獲取url地址的過程將耗費很多時間,因為對每個檔案都要執行該操作。而且取得每個檔案的url地址的過程需要訪問資料庫的次數都非常大。
而做了上面的處理後,我們可以節省獲取url地址的時間,從而可以做大更快把檔案資訊返回給使用者。與此同時,使用者如果想下載某個檔案,同樣可以通過點選連線按鈕開啟一個獲取url地址的頁面,而這個頁面包含地址重定向功能,在訪問資料庫後找到url地址並引導使用者開啟該地址。
可想而知,使用者的最大操作可能是開啟所有的檔案。這樣的情況資料庫的訪問量才和一次性給出所有檔案地址的操作量相當,但大多數情況下,使用者只選擇其中的某些結果。因此,該改進對可以明顯降低對資料庫的訪問次數,減少WEB伺服器的負荷。

5. 管理與維護

  通過資料採集和資料查詢模組的分析和設計,我們基本實現了一個FTP搜尋引擎,但是還需要相關的資料更新和維護。
這裡的資料更新包括“站點可連線性的測試”,校園網內新開通的FTP站點的登記等,我們這裡是通過winsock控制元件來實現的。只需要通過它來登入ftp站點就可以拉。
另外,站點採集最好是做成自動化的,從而較少人為的操作負擔。
這樣一個相對完善的FTP搜尋系統就已經完成拉。

6. 其他功能

  通過對其他ftp搜尋引擎的分析發現,大都有站點快照功能,經過仔細的分析和設計後,終於完成基於原有的資料庫就很快實現拉。
  站點快照功能有個好處,可以引導使用者快速的瀏覽某個ftp站點下的檔案並進行下載等操作。
  這裡有兩種設計方案:
  第一種,“天網”的樹形單頁結構,這裡把檔案系統的結構完美的體現出來拉。而且瀏覽起來很方便。
  第二種,“星空”的表形多頁結構,這裡其實只是對錶結構的一個簡單“翻譯”,而且它同我們平時訪問ftp伺服器見到的介面差不多,只是瀏覽的資料很能有很大的提高,而且頁面排布可以更美觀些。
  由於時間等方面因素,暫時本搜尋引擎只實現第二種方案。在時間允許的情況將實現第二種方案。

結束語

  我們設計的FTP搜尋引擎已經在網站上運行了兩個多月,為校園網使用者提供了很好的服務。訪問量到現在已經超過1萬次。最近和usmot共同推出了最新版本——“獵鷹搜尋”。對資料採集和資料查詢、資料的更新維護、以及WEB頁面的設計方面都做了優化,效果比較好,當然也存在一些不足。隨著搜尋引擎技術的不斷髮展,我們將繼續秉著為校園網添彩、為校園網使用者服務的熱情繼續努力,推出更好的FTP搜尋服務。另外,我們打算把該專案轉到linux下,作為開源專案來開發,具體打算採用php+c+mysql模式。我們期待著會有新的收穫。

參考文獻:

1,張運凱 劉巨集忠 郭巨集剛 《FTP搜尋引擎的設計與實現》
2,(美國)MICROSOFT公司 《Visual Basic 6.0 控制元件參考手冊》
3,《用asp製作強大的搜尋引擎》
http://www.hoogl.net/20051126204241/

4,《SQL參考手冊》http://www.poptool.net/quickcheck/sql/
5,《ASP基礎教程》
http://www.ahtvu.ah.cn/jxc1/wshdsh/webstyle/computer/asp%BB%F9%B4%A1%BD%CC%B3%CC%B5%E7%D7%D3%CA%E9/homepage.htm
6,《ASP網頁的優化》http://www.linkwww.com/article/list.asp?id=16
7,歪酷搜尋頁面風格http://www.ycul.org/


其他說明:
1,   該FTP搜尋引擎目前的測試地址:falcon.96.cn
2,   本人聯絡方式:qq:253087664 Email:
[email protected]

3,   關於詳細原始碼的下載問題,暫時不提供下載,以後可以到“蘭大ftp聯盟QQ群:18301157”檢視詳細原始碼的釋出地址”。申請加入時請輸入:“蘭大ftp聯盟”字樣,以表明自己身份,謝謝。
4,   由於打算到Linux下做ftp搜尋引擎的開源專案,大家如果有興趣,可以聯絡本人,或者加入上面的群,也可以到falcon.96.cn下的BBS留言。
5,   由於falcn.96.cn為申請的二級域名,可能不穩定,以後也許訪問不了,那麼請原諒。





2006.3.9
falcon於蘭州大學

[
宣告:該篇文章系本人原創,如需轉載,請表明出處和作者資訊
說明:另外,由於目前該blog好象不支援直接貼上表格和圖片,有些東西沒有正常顯示,如果需要,請到oss上搜索並下載
]


來源:http://oss.lzu.edu.cn/blog/blog.php?/do_showone/tid_39.html

 





           

給我老師的人工智慧教程打call!http://blog.csdn.net/jiangjunshow

這裡寫圖片描述