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 ...