用ASP實現搜索引擎的功能是一件很方便的事可是如何實現類似的智能搜索呢?比如當在搜索條件框內輸入“中國人民”時自動從中提取“中國”“人民”等關鍵字並在數據庫內進行搜索看完本文後你就可以發現這個功能實現起來竟然是如此的簡單
第一步我們要建立一個名為db_samplemdb的數據庫(本文以Access數據庫為例)並在其中建立表T_Sample表 T_Sample包括如下字段
ID 自動編號
U_Name 文本
U_Info 備注
第二步我們開始設計搜索頁面Searchasp該頁面包括一個表單(Frm_Search)表單內包括一個文本框和一個提交按鈕並將表單的method屬性設為“get” action屬性設為“Searchasp"即提交給網頁自身代碼如下
以下是代碼片段
<! Searchasp >
<form name="frm_Search" method="get" action="Searchasp">
請輸入關鍵字
<input type="text" name="key" size="">
<input type="submit" value="搜索">
</form>
下面就進入了實現智能搜索的關鍵部分
首先建立數據庫連接在Searchasp的開始處加入如下代碼
以下是代碼片段
<%
Dim strProviderCNN
strProvider="Provider=MicrosoftJetOLEDB;Data Source="
strProvider=strProvider & ServerMapPath("") & "datadb_Samplemdb" 假設數據庫存放在主頁根目錄下的data目錄下
Set CNN = ServerCreateObject("ADODBconnection")
CNNOpen strProvider 打開數據庫連接
%>
接下來判斷 ASP頁所接收到的數據並在數據庫中進行搜索
以下是代碼片段
<font color="#FF">未找到任何結果!!!</font>
<%
Else
%>
搜索名稱為“<font color="#FF"><%= S_Key %></font>”的項共找到 <font color="#FF"><%= RSTRecordCount %></font> 項<p>
<%
While Not RSTEOF 遍歷整個記錄集顯示搜索到的信息並設置鏈接
%>
<! 此處可設為你所需要的鏈接目標 >
<font style="font: pt 宋體"><a href="infoasp?ID=<%= RST("ID") %>" target="_blank"><%= RST("U_Name") %></a></font>
<! 顯示部分詳細內容 >
<font style="font: pt 宋體"><%= Left(RST("U_Info")) %></font><p>
<%
RSTMoveNext
Wend
RSTClose
Set RST=Nothing
End If
End If
%>
在上面的代碼中有一個自定義函數 AutoKey 該函數是實現智能搜索的核心所在代碼如下
以下是代碼片段
<%
Function AutoKey(strKey)
CONST lngSubKey=
Dim lngLenKey strNew strNew i strSubKey
’檢測字符串的合法性若不合法則轉到出錯頁出錯頁你可以根據需要進行設定
if InStr(strKey"=")<> or InStr(strKey"`")<> or InStr(strKey"")<> or InStr(strKey" ")<> or InStr(strKey" ")<> or InStr(strKey"")<> or InStr(strKeychr())<> or InStr(strKey"")<> or InStr(strKey"")<> or InStr(strKey"<")<> or InStr(strKey">")<> then
ResponseRedirect "errorhtm"
End If
lngLenKey=Len(strKey)
Select Case lngLenKey
Case 若為空串轉到出錯頁
ResponseRedirect "errorhtm"
Case 若長度為則不設任何值
strNew=""
strNew=""
’Case Else 若長度大於則從字符串首字符開始循環取長度為的子字符串作為查詢條件
For i= To lngLenKey(lngSubKey)
strSubKey=Mid(strKeyilngSubKey)
strNew=strNew & " or U_Name like %" & strSubKey & "%"
strNew=strNew & " or U_Info like %" & strSubKey & "%"
Next
End Select
’得到完整的SQL語句
AutoKey="Select * from T_Sample where U_Name like %" & strKey & "% or U_Info like %" & strKey & "%" & strNew & strNew
End Function
%>
要實現智能搜索其核心就是將搜索關鍵字進行自動分組在此處我們使用了循環取長度為的子串的方法為什麼不將子串長度定為或其他呢?這是因為若子串長度小於即為時會失去將關鍵字分組的功能而若子串長度大於則會丟失一些詞組大家可以將 CONST lngSubKey=改為其他數字試一試孰優孰劣自見分曉
最後別忘了將數據連接關閉以釋放資源
以下是代碼片段
<%
CNNClose
Set CNN=Nothing
%>
至此這個
From:http://tw.wingwit.com/Article/program/net/201311/14466.html