藏刊網,職稱文章發表、期刊投稿權威機構

投稿咨詢

投稿在線咨詢

專著咨詢

合著&獨著&編委

編輯在線咨詢

專利咨詢

專利申請&轉讓

編輯在線咨詢

軟著版權

軟著版權

編輯在線咨詢

在線溝通

論文&專著&專利

編輯在線咨詢

微信聊

微信掃一掃

首頁 > 其他論文 > > 基于Linux系統的FTP搜索引擎開發
基于Linux系統的FTP搜索引擎開發
>2024-02-13 09:00:01



安徽農業大學校園網始建于 2000 年,現有信息網點一萬多個,學生用戶二萬多人,FTP 服務器是校園網主要的應用服務之一。在 FTP 服務器上目前保存著多種共享軟件、技術資料和多媒體數據等幾十個 TB 的文件資源。FTP 服務器建有若干目錄,文件與目錄結構存在多樣性、復雜性,學生要想在FTP 服務器上找到自己需要的文件,很麻煩,即使按照目錄名( 文件夾) 點擊,也需要好幾層才能找到自己所需要的文件,無法快速搜索、定位,更別提進行數據文件的統計、學生需求應用的查詢等,若要在多個 FTP 服務器上查找文件更是困難?;趪鴥缺贝筇炀W、百合谷搜索和 FTP 星空搜索的搭建思路,構建安徽農業大學自己的 FTP 搜索引擎,便于省內其他高校進行類似建設,也為了進一步提高校園網的應用服務水平,我們團隊根據高校的實際需求情況,以 Linux 系統為平臺,利用 Apache、MySQL、PHP和 Python,設計并開發了 FTP 搜索引擎。

1 FTP 搜索引擎原理

FTP 搜索引擎采用 C / S 模式,Server 端進行數據采集和處理( 入庫) ,Client 進行關鍵詞搜索,然后Server 進行數據處理,最后返回結果。故采用以下思路來進行模塊式分析、解決:

( 1) 數據的存儲方式( 數據庫設計) ;( 2) 如何采集數據( 多線程) ;( 3) 查詢時 Server 端處理數據( 分詞,限定條件) 并返回,同時將結果顯示給用戶。

FTP 搜索引擎由數據采集、數據查詢和站點維護等模塊組成。建立一個 FTP 搜索引擎,首先要收集各個 FTP 站點上的文件信息,并把這些信息存儲到配置文件中; 然后給用戶提供查詢界面,以獲取用戶要查詢的信息,把這些查詢信息轉化為數據庫語言,然后再進行數據庫查詢,把查詢結果以友好的界面顯示給用戶; 搜索引擎建好后,為了使數據庫數據與 FTP 站點的數據保持一致,還需要更新 FTP 站點的文件信息、添加新的 FTP 站點等管理和維護工作。FTP 搜索引擎的結構[1]如圖 1 所示。

設計 FTP 搜索引擎時,操作系統采用 Linux,WWW 服務器采用 Apache,數據庫采用 MySQL,編程語言采用 PHP 和 Python,其中 Python 作為遍歷腳本。

2 數據庫結構和設置

2. 1 文件信息分析

安徽農業大學 FTP 站點上,根目錄下的目錄中有許多子文件夾和文件,其中每個文件信息又包括:

文件名、文件大小、文件地址、日期、類型等屬性。對應這些文件信息,在數據庫中設置相應的字段,用來記錄這些信息,用字段 name 存儲文件名( 不大于255 個字符) ,將其設置為 varchar 類型,長度為 255,host 表示 FTP 網站的名稱,說明是哪個 ftp 網站上的文件,dir 字段準確給出文件的 URL 地址。由于有些文件的 URL 比較長,因此把 dir 字段類型設置為longtext.有了這些字段,就可以在網絡中找到此文件的位置。當然還需要記錄下文件的大小、時間、日期,以便用戶分辨選擇他們所要的文件。另外為提高查詢速度( 查詢時對文件名字段的訪問比較頻繁) ,文件名字段設置成 Index 字段。文件表結構見表 1、表 2,數據庫結構見圖 2.

2. 2 FTP 站點信息分析

一個 FTP 站點通常包含服務器名稱、用戶名和密碼。對應 FTP 站點的信息,數據字段設置如下:

站點名、站點 IP 地址、用戶名、用戶密碼等幾個字段。站點名字段類型為 vchar,長度為 60; IP 地址為vchar 類型,長度為 50; 用戶名為 vchar 類型,長度為50; 密碼設置為 password 類型,長度為 60.由于 FTP站點名也是使用較為頻繁的數據,因此把它設置為Index 字段。

3 數據采集

首先收集各個 FTP 站點的文件信息,記錄到數據庫里,用于提供搜索。因特網中有許多 FTP 站點,要收集某個 FTP 站點的文件信息時,就從數據表中讀出站點信息,然后登陸到該 FTP 站點。大部分 FTP 服務器都有公共訪問區,即公用 FTP,我校對全校師生員工提供免費的文件信息服務,用戶名為public,密碼為 public,目前限制為校內才能訪問。

數據采集程序以用戶名和密碼登陸站點,然后對該站點所有目錄進行采集,讀取每個目錄下的文件信息,在收到文件信息后,對其進行分析,將文件信息存儲到相應的數據表字段中。完成此站點的數據采集之后,再讀取另外一個 FTP 站點的信息,進行文件信息采集,如此循環,從而采集所有已知 FTP 站點的文件信息。為了加快遍歷速度,這里采用了python 的進程和線程技術,經過測試,遍歷 30 萬條記錄只需要 10 分鐘左右。

由于獲取 FTP 信息在使用深度優先和廣度優先上算法是相同的,這里使用的是深度優先算法。

獲取目錄信息主要使用的是遞歸來遍歷文件和文件夾信息,有一個主函數的作用是遍歷文件,存入該文件的名稱和目錄信息到數據庫中。當得到的是文件目錄時,則繼續重復調用該函數,進入該目錄繼續遍歷,直至完成整個目錄的遍歷為止。這樣,我們存入數據庫就包括一個文件,含有所屬站點、文件名稱( 文件格式) 、路徑等信息,如圖 3 所示。

為了增量獲取信息,可以通過設定計劃任務在每天的凌晨來啟動遍歷程序,這樣可以確保新增的文件可以及時存入到數據庫中,有效保證數據庫文件的及時性、準確性。

計劃任務: 00***root python / opt / ftpspider. py

抓取腳本:

#! / usr / bin / python

#encoding = utf - 8

#導入模塊

import os,re,types,MySQLdb,sys,codecs,threading

from multiprocessing import Process,Pool

from ftplib import FTP

#連接 FTP

def link( username,password,ip) :

ftp = FTP( ip)

login = ftp. login( username,password)

return ftp

#獲取文件信息并存入數據庫

def getfile( ftp,path,ip) :

ftp. cwd( path)

for file in ftp. nlst( ) :

dir = path + ' / ' + file

try:

ftp. cwd( dir)

dir = ftp. pwd( )

#多線程獲取文件信息

t = threading. Thread( target = getfile,args =

( link( ) ,dir) )

t. start( )

t. join( )

except:

dir = path

name = file

#將文件信息存入數據庫

sql = “ insert into file values ( ” ,' + ' + ip

+ ',' + path + ',' + name + ‘) ’“

insert( sql)

def insert( sql) :

conn = MySQLdb. Connect ( user = ' root',passwd

= ” ,db = ' ftp',host = ' 192. 168. 77. 5',charset = '

utf8‘)

cur = conn. cursor ( cursorclass = MySQLdb. cur-

sors. DictCursor)

cur. execute( “ SET NAMES utf8” )

cur. execute( sql)

rows = cur. fetchall( )

conn. commit( )

cur. close( )

conn. close( )

#獲取 FTP 站點信息

def ftpinfo( ) :

conn = MySQLdb. Connect ( user = ' root',passwd

= “ ,db = ' ftp',host = ' 192. 168. 77. 5',charset = 'utf8’)

cur = conn. cursor( cursorclass = MySQLdb. cur-

sors. DictCursor)

cur. execute( ” SET NAMES utf8“ )

cur. execute( ” select* from ftpinfo“ )

rows = cur. fetchall( )

return rows

conn. commit( )

cur. close( )

conn. close( )

#啟動該腳本

def start( ) :

addr = ftpinfo( )

for info in addr:

username = info['username']

password = info['username']

ip = info['ip']

ftp = link( username,password,ip)

#多進程

p = Process( target = getfile,args = ( ftp,' / ',ip) )

p. start( )

start( )

4 數據查詢

數據查詢主要包括查詢 web 頁面的設計、程序編寫和查詢結果的輸出處理。查詢頁面由 Web 服務器提供,用戶瀏覽該頁面,填寫并提交搜索信息,如文件名、大小等。然后將該信息提交給 Web 服務器,由查詢程序進行處理,再生成查詢語句,提交至SQL 服務器進行查詢。查詢結果則由查詢程序進行處理,以超鏈接形式生成 Web 頁面,便于用戶瀏覽,獲悉結果[1].

為進一步實現文件細分,引導搜索,增加便利性,我們仿照其他全文搜索引擎的樣式并結合本校FTP 站點文件的現狀,決定按照文件格式的區分來進行分類搜索,主要依據是文件的格式( 文件的后綴名) ,比如。 doc、。 rar 等。當用戶檢索關鍵詞時,我們可以通過如下 sql 語句來進行 mysql 的多字段檢索匹配,其中三個字段 site( 站點) 、name( 文件名或類型) 、dir( 目錄) 中的任何一個字段和給出的關鍵詞相同的話即可返回結果。Sql 語句[2]如下:

select* from ' file' where concat( site,name,dir)like'% 關鍵詞%5 搜索結果處理。

5. 1 搜索結果分頁

分頁顯示,即數據庫中的結果集,一段一段顯示出來,包括: 怎么分段、當前在第幾段 ( 每頁有幾條,當前在第幾頁) 分頁公式:

( 當前頁數 -1) × 每頁條數,每頁條數

Select* from table limit ( S| Page - 1) * S| PageS-ize,S| PageSize

前 10 條記錄: select* from table limit 0,10.

5. 2 關鍵詞推薦

用戶每次檢索記錄后,我們都會將搜索過的關鍵詞存入到數據庫中,在首頁會有一個最近搜索詞的推薦,便于用戶知道其它人最近檢索的是什么,我們也可以直接插入關鍵詞到數據庫中。根據這些關鍵詞,作為校園網的一項重要服務,就可以有針對性地上傳特定的更具體的資源。關鍵詞推薦效果如圖4 所示。


關鍵詞推薦效果的具體實現過程如下:

S| sql = “ select DISTINCT history. 'key' from histo-

ry; ” ;

S| query = mysql_query( S| sql) ;

while( S| rs = @ mysql_fetch_array( S| query) ) {

S| return. = getlabel( S| rs['key']) ;

}

echo S| return;

/ / 獲得推薦關鍵字隨機樣式

function getlabel( S| key) {

S| label_style = array(

'0' = > 'label label-primary',

'1' = > 'label label-success',

'2' = > 'label label-info',

'3' = > 'label label-warning',

'4' = > 'label label-danger',

'5' = > 'label label-warning',

'6' = > 'label label-danger',

) ;

/ / 返回最新關鍵詞標簽

return“ < a href = '#'class = ‘” . S| label_style[rand

( 0,6) ]. “' > ”. S|key. “ < /a > ”;

}

5. 3 搜索結果自動分類

傳統的 FTP 搜索引擎一般都是根據用戶提交的查詢詞,在索引數據庫中匹配,然后對檢索結果按相關度排序。誠然,相關度排序能夠將較重要的結果信息反饋給用戶,但也存在著一詞多義與多詞同義的問題,使得檢索結果依然很難滿足不同用戶的需求。為了改進檢索結果的質量,采用: 根據 FTP文件擴展名標識,其次利用 K - 群近鄰算法對檢索結果的文件名分類,這樣檢索結果就有了層次結構,從而進一步方便了用戶查找,而且提高了用戶的獲取效率。搜索結果如圖 5 所示。

6 自定義 FTP 服務器地址

對于 FTP 服務器地址的管理,設置一個專門的配置文件,該配置文件僅只讀權限,且無法下載。該文件保存以下信息: FTP 服務器的地址,用戶名和密碼。數據結構使用的是二維數組,如 S| ftp_site = ar-ray( '0' = > array ( ' ip' = > '210. 45. 176. 32',' user-name' = > 'public','password' = > 'public‘) ,

'1' = > array ( ' ip' = > '210. 45. 176. 24',' user-name' = > 'public','password' = > 'public’) ) ;

當執行遍歷程序時,會在后臺讀取該文件,一個站點遍歷完成后,則會遍歷下一個 FTP 站點。

7 搜索引擎維護與性能優化

搜索引擎維護,其中重要的一點就是數據庫數據與 FTP 站點的數據保持一致,維護中包括增加、顯示、刪除及更改 FTP 站點等功能。另外,為了實現站點文件信息自動更新的功能,把更新 FTP 站點文件信息的程序( ftp. php) 設置成系統周期性計劃任務,如日凌晨1∶ 00 運行 1 次。

結合其他 Web 搜索引擎的優點,我們采用了全文索引方式,即先對網頁進行中文分詞,然后提取關鍵詞項對數據文件建立倒排索引表[3].經過學生的調查統計分析,用戶在 FTP 搜索引擎中查詢的文件類型主要是電影、軟件、歌曲、視頻等。FTP 文件名大致可分 4 種類型: 純英文、純中文、中英文混排、其它等[3].我校 FTP 服務器中存儲的文件: 12% 的文件為純英文命名,45% 的文件是中英文混排命名,32% 的文件是純中文命名,其它命名形式占 11% ,以上命名比例在視頻與電影文件命名中尤為突出。

因此,在設計搜索引擎索引文件結構時應對中文作更多的優化。由于中文字符集的常用漢字數比英文字母多,所以兩者的編碼方式不同[4],英文是單字節,而中文要用兩個字節來存儲,且雙字節索引的性能比單字節的要高,因此在考慮兼容性與性能的基礎上,FTP 搜索引擎采用雙字節倒排索引技術,即對文件名中每兩個字節建立倒排索引表。

ALTER TABLE ' file' ADD FULLTEXT INDEX 'filename‘( 'name’)

8 結論

介紹了高校 FTP 搜索引擎的設計與實現,重點展示了系統所采用的關鍵技術和方法,對構建思路、程序設計、語句實現等方面進行了系統、具體的闡述。目前該搜索引擎已經在安徽農業大學校園網上使用,為用戶提供了很好的服務,得到了用戶的普遍好評。下一步將繼續就搜索引擎的分布式處理、支持 IPV6、進一步提高查詢速度、更高效的分類檢索、滿足移動終端需求、跨高校的 FTP 站點群共享等方面的技術進行研究,努力讓高校 FTP 搜索引擎能更好地服務于廣大師生員工。

參考文獻:

[1]汪劍,牟奇春,王霖,等。 基于 SQL SERVER 的 FTP 搜索引擎系統的設計[J]. 軟件導刊,2008,7( 6) : 93 -95.

[2]鐘偉財。 精通 PHP4. 0 與 MySQL 架構 Web 數據庫實務[M]. 北京: 中國青年出版社,2000.

[3]武海燕。 基于校園網的 FTP 搜索引擎的研究與實現[J]. 中國電子商務,2010( 2) : 53 -54.

[4]石小梅,劉克劍。 FTP 搜索引擎索引技術的研究[J]. 西南民族大學學報: 自然科學版,2012,38( 3) : 475 -477.

綜合排序
投稿量
錄用量
發行量
教育界

主管:廣西壯族自治區新聞出版局

主辦:廣西出版雜志社

國際:ISSN 1674-9510

國內:CN 45-1376/G4

級別:省級期刊

中國報業

主管:中國報業協會

主辦:中國報業協會

國際:ISSN 1671-0029

國內:CN 11-4629/G2

級別:國家級期刊

中國房地產業

主管:中華人民共和國住房部和...

主辦:中國房地產業協會

國際:ISSN 1002-8536

國內:CN 11-5936/F

級別:國家級期刊

建筑與裝飾

主管:天津出版傳媒集團有限公司

主辦:天津科學技術出版社有限...

國際:ISSN 1009-699X

國內:CN 12-1450/TS

級別:省級期刊

財經界

主管:國家發展和改革委員會

主辦:國家信息中心

國際:ISSN 1009-2781

國內:CN 11-4098/F

級別:國家級期刊

文化月刊

主管:中華人民共和國文化部

主辦:中國文化傳媒集團有限公司

國際:ISSN 1004-6631

國內:CN 11-3120/G2

級別:國家級期刊

期刊在線投稿系統
上傳文件
支持上傳.doc、.docx、.pdf文件
18年國內外學術服務,發表國際文獻請認準藏刊網官網

資深編輯團隊

專業設計投入方案

投稿成功率極高

企業信譽保障

對公交易更安全

人民群眾口碑好

高效投稿流程

審稿快!出刊快!檢索快!

正規刊物承諾

無假刊!無套刊!

投稿成功!

藏刊網提醒您

1.稿件將進入人工審稿階段,審稿后會有編輯聯系您,請保持手機暢通。

2.為避免一稿多投、重刊等現象影響您的發表,請勿再投他刊。

確定

投稿失??!

藏刊網提醒您

由于網絡問題,提交數據出現錯誤,請返回免費投稿頁面重新投稿,謝謝!

確定

藏刊網收錄400余種期刊,15年誠信發表服務。

發表職稱文章,覆蓋教育期刊、醫學期刊、經濟期刊、管理期刊、文學期刊等主流學術期刊。

  投稿郵箱:cangkan@163.com

本站少量資源屬于網絡共享如有侵權請您聯系我們,將在第一時間刪除。

版權 2009-2022 版權所有:河北藏刊文化發展有限公司 工信部備案:ICP備20016223號 冀公網安備13010502002858號

青青青爽不卡一区二区_操婷婷色六月中文字幕_国产精品yjizz视频网_中文无码一级大片_A级毛片100部免费观