电竞比分网-中国电竞赛事及体育赛事平台

分享

利用ASP打造站內(nèi)搜索引擎

 藥林怪人.櫻凡 2006-06-16
不知你上網(wǎng)時注意到?jīng)]有:一些內(nèi)容豐富的網(wǎng)站,總建有一個內(nèi)容搜索引擎,你只要輸入你想閱讀資料的類別(比如:windows98),一按“搜索”按鈕,該網(wǎng)站所有關于“windows98”的文章列表就呈現(xiàn)在你的眼前,好不方便??!要知道當自己想要查的資料老是找不到,整天按著“下一頁”這個按鈕把頁面翻來翻去的,這真是一件煩心的事情。那么在網(wǎng)上建有家的朋友是不是也想在你的網(wǎng)站按一個這樣的搜索引擎呢?在下面我介紹如何用ASP打造一個站內(nèi)搜索引擎。當然了,我的這個搜索引擎是不能與那些門戶網(wǎng)站的搜索引擎相比的。 注:由于搜索引擎的資料都是放在數(shù)據(jù)庫內(nèi),所以要求大家對數(shù)據(jù)庫該有一定的了解。在這里我選擇MicroSoft的Access 2000當作存放資料的數(shù)據(jù)庫,對個人網(wǎng)站的要求來講已經(jīng)綽綽有余了。數(shù)據(jù)庫的表格名稱和字段定義如下所示,我將數(shù)據(jù)庫取名為Search.mdb。 表格名稱 搜索引擎 字段名稱 字段屬性 文章編號 自動編號 文章標題 文字(255字符) 文章網(wǎng)址 文字(255字符) 內(nèi)容簡述 文字(255字符) 加入時間 日期/時間 訪問次數(shù) 數(shù)字 最后一項"訪問次數(shù)"可加可不加,如果你的網(wǎng)站有針對文章訪問率作統(tǒng)計的話,那最好將他加上,可以讓讀者做個參考,其它幾個字段應該都是不可或缺的(對內(nèi)容網(wǎng)站而言)。數(shù)據(jù)庫建好之后接下來就是要將資料輸入了,由于本文主要是針對ASP的應用,所以對于數(shù)據(jù)庫這部分我就不詳解了,這一部份交給大家去完成,現(xiàn)在最重要的就是讓我看看運行搜索功能的程序該如何編寫的。 首先你需要一個輸入搜索字符串的接口,這部分只需要一個簡單的Html檔就可以完成。我把它命名為Search.htm。 Search.htm <%注:輸入的字符串將傳送到Search.asp%>
接著就應進入本文的主題了。在這里我把這個程序命名為Search.asp。搜索引擎的運作過程如下所示:將字符串傳遞給Search.asp,將目前所在頁數(shù)、搜索字符串、資料篇數(shù)傳遞至Search.asp,如果字符串是由按鈕傳來的。 YES NO NO YES NO 注:將目前所在頁數(shù)、搜索字符串、資料篇數(shù)傳遞至Search.asp: Search.asp <!--#include file="adovbs.inc"--> <%注:ACTION是判斷使用者在搜索結(jié)果之后是按下上一頁的按鈕還是下一頁的按鈕%> <% ACTION = Request.Form("ACTION") %> <%注:由PAGE判斷目前所在頁數(shù)%> <% PAGE = CInt(Request.Form("PAGE")) %> <%注:由RCOUNT來判斷目前顯示的資料是哪幾篇%> <% RCOUNT = CInt(Request.Form("RCOUNT")) %> <%注:如果是在第一頁就將PAGE設為1%> <% If RCOUNT = "" Then %> <% RCOUNT = "0" %> <% End If %> <% If RCOUNT = "0" Then %> <% PAGE = 1 %> <% End If %> <%注:從strSearchString表單中取出字符串%> <%strSearchString=Request.Form("strSearchString")%> <% 注:定義數(shù)據(jù)庫的路徑: Dim MyConnectString MyConnectString = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & Server.MapPath("/asp/search/Search.mdb") & ";DefaultDir=" & Server.MapPath("/asp/search") & ";DriverId=25;FILE=MS Access;MaxBufferSize=512;PageTimeout=5" 注:打開數(shù)據(jù)庫連結(jié): Dim Conn Set Conn = Server.CreateObject("ADODB.Connection") 注:由數(shù)據(jù)庫連結(jié)來打開數(shù)據(jù)庫 Conn.Open MyConnectString 注:將搜索到的字符串作特殊處理: strSearch1 = "" & strSearchString & "" 注:開始定義數(shù)據(jù)庫搜索語法 Dim strSQL, tmpSQL strSQL = "SELECT * FROM 搜索引擎 WHERE " tmpSQL = "內(nèi)容簡述 LIKE " 注:為了避免讀者不小心在字符串中輸入空格符而找不到數(shù)據(jù),所以我在這時用了一點字符串處理的小技巧,定義空格符初始位置為1,找出輸入字符串中空格符的位置。 Dim Pos Pos = 1 While Pos > 0 Pos = InStr(1,strSearchString," ") 注:如果輸入字符串中不包含空白字符串就不需要作字符串處理,直接進數(shù)據(jù)庫比對資料: If Pos = 0 Then tmpSQL = tmpSQL & "‘%" & strSearchString & "%‘ OR 文章標題 LIKE ‘%" & strSearchString & "%‘)" 注:如果輸入字符串中包含空白字符串: Else 注:將輸入字符串以空白區(qū)隔開,當作個別搜索字符串,譬如搜索"電腦 超頻",會變成搜索"電腦"、"超頻",以"電腦 超頻"而言,當運行mid(strSearchString, 1, pos-1)時,所得到的結(jié)果是顯示從輸入字符串的第一個字符到空格符所出現(xiàn)的位置(3)然后減1得到電腦兩個字‘而這時候搜索字符串已經(jīng)變成"電腦"接下來先算出搜索字符串的長度len(strSearchString)=(5),再算出空格符加一后的位置然后運行: Mid(strSearchString,Pos+1,len(strSearchString)), 這時就可以取出"電腦 超頻"中的超頻兩個字,此時搜索字符串已經(jīng)被分離成電腦和超頻兩個字了,如果你不用上面這段字符串處理程序,你會發(fā)現(xiàn)只要你的搜索字符串中含有空格符就會找不到數(shù)據(jù); tmpSQL = tmpSQL & "‘%" & mid(strSearchString, 1, pos-1) & "%‘ OR 文章標題 LIKE ‘%" & mid(strSearchString, 1, pos-1) & "%‘ AND 內(nèi)容簡述 LIKE " strSearchString = Mid(strSearchString,Pos+1,len(strSearchString)) End If Wend 注:將SQL語法分離的優(yōu)點是彈性大,你不需要重復定義就可以無限次套用。 strSQL = strSQL & tmpSQL strSQL = strSQL & " ORDER BY 文章編號" 經(jīng)過字符串處理程序之后,此時完整的SQL語法將呈現(xiàn)如下的內(nèi)容:‘SELECT * FROM 搜索引擎 WHERE 內(nèi)容簡述 LIKE 電腦 OR 文章標題 LIKE 電腦 AND 內(nèi)容簡述 LIKE 超頻 OR 文章標題 LIKE 超頻 ORDER BY 文章編號。 注:下面建立數(shù)據(jù)庫集合: Dim rsResults Set rsResults = Server.CreateObject("ADODB.Recordset") rsResults.Open strSQL, conn,3 注:計算搜索到的資料總篇數(shù),這時候的tmpSQL=(內(nèi)容簡述 LIKE 電腦 OR 文章標題 LIKE 電腦 AND 內(nèi)容簡述 LIKE 超頻 OR 文章標題 LIKE 超頻) Dim rsTotalRecords strSQL = "SELECT COUNT(*) FROM 搜索引擎 WHERE " & tmpSQL Set rsTotalRecords = Conn.Execute(strSQL) %> <%注:定義每一頁顯示的資料篇數(shù)是10篇HOWMANY = 10rsResults.PageSize = HOWMANY%> <%注:如果是按下下一頁的按鈕的話%> <% If ACTION = "FORWARD" Then %> <%注:先將目前所在頁數(shù)加一%> <% PAGE = PAGE + 1 %> <%注:再將目前顯示的資料篇數(shù)加10%> <% RCOUNT = RCOUNT + HOWMANY %> <%注:如果你是從第一頁跳到第二頁,你應該先將第1到第10篇資料略過,只顯示第11篇到第20篇資料,因為原本在第一頁的時候Rcount為0,加上10之后就等于10,而這10篇資料就是你所要略過的,同樣的,如果你是從第二頁跳往第三頁的話,你必須略過第1篇到第20篇的資料,從第21篇資料開始顯示rsResults.MoveNext‘就是在運行這個略過的動作%> <% For DACOUNT = 1 To RCOUNT %> <% rsResults.MoveNext %> <% Next %> <% End If %> <%注:相反的如果是按下上一頁按鈕的話%> <% If ACTION = "BACK" Then %> <%注:先將目前所在頁數(shù)減一%> <% PAGE = PAGE - 1 %> <5注:再將目前顯示的資料篇數(shù)減10%> <% RCOUNT = RCOUNT - HOWMANY %> <%注:如果不是在第一頁的話(RCOUNT <> 0)才要運行資料略過的動作%> <% If RCOUNT <> 0 Then %> <% For DACOUNT = 1 To RCOUNT %> <% rsResults.MoveNext %> <% Next %> <% End If %> <% End If %> <%注:如果數(shù)據(jù)庫中沒有符合的資料就告知讀者找不到資料%> <% if rsResults.EOF then %> 對不起,找不到你想要的資料.

回到搜索首頁 <%注:如果有找到資料就準備顯示資料%> <% Else%>

找到<%=rsTotalRecords(0)%>篇記錄 

<% Dim Y Y=0 While Not rsResults.EOF iCurrentID = rsResults("文章編號") %> <% 注:將文章標題含有搜索字符串的字加上特殊效果,并將轉(zhuǎn)換后的結(jié)果傳給Message變量,Replace函數(shù)的用法如下:例如你有一個字符串變量 AAA=”專業(yè)電腦網(wǎng)站” 如果你想將電腦這個字轉(zhuǎn)變成Computer,你可以使用如下的方法: AAA=Replace(AAA, “專業(yè)電腦網(wǎng)站”, “Computer”) ***結(jié)果AAA就變成專業(yè)Computer網(wǎng)站了*** Message = CStr(Replace(rsResults("文章標題 "),strSearchString,strSearch1)) %> <% 注:將內(nèi)容簡述含有搜索字符串的字加上特殊效果,并將轉(zhuǎn)換后的結(jié)果傳給Message1變量; Message1 = CStr(Replace(rsResults("內(nèi)容簡述"),strSearchString,strSearch1)) %>

<%注:將搜索結(jié)果顯示出來%>
">
  • <% =iCurrentID%>、<%=Message%>
  • <%=Message1%><%=rsResults("加入時間")%>
    訪問次數(shù):<%=rsResults("訪問次數(shù)")%>

    <%注:在這里我將搜索動作設定為:當找到10篇資料之后就停止搜索,我用到一個變量Y來控制,先定義Y等于0,每找到一篇資料就將Y加一,當Y等于10的時候先看看數(shù)據(jù)庫是不是還有資料,如果還有資料就將剩下的資料通通略過,就是rsResults.MoveNext。%> <% Y = Y + 1 rsResults.MoveNext If Y=10 then While Not rsResults.EOF rsResults.MoveNext Wend End If Wend %> <%注:準備顯示上一頁和下一頁的按鈕%>

    <%注:以RCOUNT來判斷是不是在第一頁,如果不是在第一頁就顯示上一頁的按鈕,并將預設的參數(shù)(數(shù)據(jù)篇數(shù)-RCOUNT、目前頁數(shù)-PAGE、搜索字符串-strSearchString)傳回%> <% If RCOUNT > 0 Then %>

    <%=strSearchString%>

    <% End If %>
    <%注:如果不是在最后一頁(rsResults.PageCount代表總頁數(shù))就顯示下一頁的按鈕,并將預設的參數(shù)(數(shù)據(jù)篇數(shù)-RCOUNT、目前頁數(shù)-PAGE、搜索字符串-strSearchString)傳回%> <% If PAGE = rsResults.PageCount Then %> <% Else %>

    <%=rsResults.PageCount%>

    <% End If %>
    <%End IF%> 完成以上步驟,一個簡單的站內(nèi)搜索引擎就完成了,在網(wǎng)上顯示的介面如下圖: 
    此主題相關圖片如下:
     小結(jié): 由于這個搜索引擎主要是針對個人網(wǎng)站的資料作搜索,所以在設計上并不太難,與一般門戶網(wǎng)站的搜索引擎相比,其最大的差別就在于門戶網(wǎng)站的數(shù)據(jù)庫是以關聯(lián)性和層次性的資料型態(tài)存在,而我所介紹的這個搜索引擎僅僅只包含一個層次而已,不過對那些單純的內(nèi)容個人網(wǎng)站來說卻已是綽綽有余了。

      本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
      轉(zhuǎn)藏 分享 獻花(0

      0條評論

      發(fā)表

      請遵守用戶 評論公約

      類似文章 更多