ASP智慧型搜尋的實現

2021-04-06 12:24:41 字數 2790 閱讀 3946

asp智慧型搜尋的實現

【it168 程式設計開發】用asp實現搜尋引擎的功能是一件很方便的事,可是,如何實現類似3721的智慧型搜尋呢?比如,當在搜尋條件框內輸入「中國人民」時,自動從中提取「中國」、「人民」等關鍵字並在資料庫內進行搜尋。看完本文後,你就可以發現,這個功能實現起來竟然是如此的簡單。

第一步,我們要建立乙個名為db_sample.mdb的資料庫(本文以access2000資料庫為例),並在其中建立表t_sample。表t_sample包括如下字段:

id            自動編號

u_name    文字

u_info      備註

第二步,我們開始設計搜尋頁面search.asp。該頁面包括乙個表單(frm_search),表單內包括乙個文字框和乙個提交按鈕。並將表單的method屬性設為「get」 ,action屬性設為

「search.asp",即提交給網頁自身。**如下:

下面,就進入了實現智慧型搜尋的關鍵部分。

首先,建立資料庫連線。在search.asp的開始處加入如下**:

cnn.open strprovider  '開啟資料庫連線

%>

接下來,判斷 asp頁所接收到的資料,並在資料庫中進行搜尋。

<%

dim s_key,rst,strsql

s_key = trim(request("key"))   '得到搜尋關鍵字的值

if s_key <>"" then

set rst=server.createobject("adodb.recordset")

strsql=autokey(s_key)  '此處使用自定義函式 autokey(),該函式為實現智慧型搜尋的核心

rst.open strsql,cnn,3,2  '得到搜尋後的記錄

if rst.bof and rst.eof then

%>

未找到任何結果!!!

<%

else

%>

搜尋名稱為「<%= s_key %>」的項,共找到 <%= rst.recordcount %> 項:

<%

while not rst.eof   '遍歷整個記錄集,顯示搜尋到的資訊並設定鏈結

%>

" target="_blank"><%= rst("u_name") %>

<%= left(rst("u_info"),150) %>

<%

rst.movenext

wend

rst.close

set rst=nothing

end if

end if

%>

在上面的**中,有乙個自定義函式 autokey ,該函式是實現智慧型搜尋的核心所在。**如下:

<%

function autokey(strkey)

const lngsubkey=2

dim lnglenkey, strnew1, strnew2, i, strsubkey

'檢測字串的合法性,若不合法則轉到出錯頁。出錯頁你可以根據需要進行設定。

if instr(strkey,"=")<>0 or instr(strkey,"`")<>0 or instr(strkey,"'")<>0 or instr(strkey," ")<>0 or instr(strkey,"")<>0 or instr(strkey,"'")<>0 or instr(strkey,chr(34))<>0 or instr(strkey,"/")<>0 or instr(strkey,",")<>0 or instr(strkey,"<")<>0 or instr(strkey,">")<>0 then

response.redirect "error.htm"

end if

lnglenkey=len(strkey)

select case lnglenkey

case 0   '若為空串,轉到出錯頁

response.redirect "error.htm"

case 1   '若長度為1,則不設任何值

strnew1=""

strnew2=""

case else  '若長度大於1,則從字串首字元開始,迴圈取長度為2的子字串作為查詢條件

for i=1 to lnglenkey-(lngsubkey-1)

strsubkey=mid(strkey,i,lngsubkey)

strnew1=strnew1 & " or u_name like '%" & strsubkey & "%'"

strnew2=strnew2 & " or u_info like '%" & strsubkey & "%'"

next

end select

'得到完整的sql語句

autokey="select * from t_sample where u_name like '%" & strkey & "%' or u_info like '%" & strkey & "%'" & strnew1 & strnew2

end function

%>

要實現智慧型搜尋,其核心就是將搜尋關鍵字進行自動分組。在此處,我們使用了迴圈取長度為2的子串的方法。為什麼不將子串長度定為1、3、4或其他呢?這是因為若子串長度小於2即為1時,會失去將關鍵字分組的功能,而若子串長度大於2,則會丟失一些片語。大家可以將 const lngsubkey=2改為其他數字試一試,孰優孰劣自見分曉。

最後,別忘了將資料連線關閉,以釋放資源。

<%

cnn.close

set cnn=nothing

%>

ASP智慧型搜尋的實現

用asp實現搜尋引擎的功能是一件很方便的事,可是,如何實現類似3721的智慧型搜尋呢?比如,當在搜尋條件框內輸入 中國人民 時,自動從中提取 中國 人民 等關鍵字並在資料庫內進行搜尋。看完本文後,你就可以發現,這個功能實現起來竟然是如此的簡單。ok,follow me!id 自動編號 u name ...

ASP智慧型搜尋的實現

用asp實現搜尋引擎的功能是一件很方便的事,可是,如何實現類似3721的智慧型搜尋呢?比如,當在搜尋條件框內輸入 中國人民 時,自動從中提取 中國 人民 等關鍵字並在資料庫內進行搜尋。看完本文後,你就可以發現,這個功能實現起來竟然是如此的簡單。ok,follow me!第一步,我們要建立乙個名為db...

ASP智慧型搜尋的實現

用asp實現搜尋引擎的功能是一件很方便的事,可是,如何實現類似3721的智慧型搜尋呢?比如,當在搜尋條件框內輸入 中國人民 時,自動從中提取 中國 人民 等關鍵字並在資料庫內進行搜尋。看完本文後,你就可以發現,這個功能實現起來竟然是如此的簡單。ok,follow me!id 自動編號 u name ...