如何实现智能搜索

2019-01-16 05:50:27来源:爱站网 阅读 ()

新老客户大回馈,云服务器低至5折

使用ASP实现搜索引擎的功能非常方便,但是如何实现智能搜索呢?在阅读本文之后,您会发现这个其实实现这个功能是非常简单的,下面就跟着爱站技术频道小编的步伐来了解吧!

ASP智能搜索的实现步骤
????第一步,我们要建立一个名为db_sample.mdb的数据库(本文以Access2000数
据库为例),并在其中建立表T_Sample。表T_Sample包括如下字段:
????????ID????????????自动编号
????????U_Name????文本
????????U_Info??????备注
????第二步,我们开始设计搜索页面Search.asp。该页面包括一个表单
(Frm_Search),表单内包括一个文本框和一个提交按钮。并将表单的method属
性设为“get”?,action属性设为“Search.asp",即提交给网页自身。代码如下

????
????
???????请输入关键字:?
???????
???????
????
????下面,就进入了实现智能搜索的关键部分。
????首先,建立数据库连接。在Search.asp的开始处加入如下代码:
????<%
????Dim?strProvider,CNN
????????strProvider="Provider=Microsoft.Jet.OLEDB.4.0;Data?Source="
????????strProvider=strProvider?&?Server.MapPath("\")?&?
"\data\db_Sample.mdb"??'假设数据库存放在主页根目录下的data目录下
????????Set?CNN?=?Server.CreateObject("ADODB.connection")
????????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???'遍历整个记录集,显示搜索到的信
息并设置链接
????%>
????????????????????????
????????????????????????href="info.asp?ID=<%=?RST("ID")?%>"?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
????%>
??以上就是如何实现智能搜索,更多技术知识请继续关注爱站技术频道!

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:Aspjpeg添加水印完整的使用方法

下一篇:在线管理数据库的步骤