在ASP应用程序中加入智能搜索

程序

    用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 -->
<form name="frm_Search" method="get" action="Search.asp">
请输入关键字:
<input type="text" name="key" size="10">
<input type="submit" value="搜索">
</form>
  下面,就进入了实现智能搜索的关键部分。

  首先,建立数据库连接。在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
%>
<font color="#FF0000">未找到任何结果!!!</font>
<%
Else
%>
搜索名称为“<font color="#FF0000"><%= S_Key %></font>”的项,共找到 <font color="#FF0000"><%= RST.RecordCount %></font> 项:<p>
<%
While Not RST.EOF 遍历整个记录集,显示搜索到的信息并设置链接
%>
<!-- 此处可设为你所需要的链接目标 -->
<font style="font: 12pt 宋体"><a href="info.asp?ID=<%= RST("ID") %>" target="_blank"><%= RST("U_Name") %></a></font>

<!-- 显示部分详细内容 -->
<font style="font: 9pt 宋体"><%= Left(RST("U_Info"),150) %></font><p>
<%
 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
%>
  至此,这个智能搜索引擎已经完成了。你还可以将其继续完善,比如添加分页、突出显示等功能。好了,不耽误大家时间了,赶快去试一试吧。

时间: 2024-09-29 06:26:26

在ASP应用程序中加入智能搜索的相关文章

简简单单在ASP应用程序中加入智能搜索

程序 用ASP实现搜索引擎的功能是一件很方便的事,可是,如何实现类似3721的智能搜索呢?比如,当在搜索条件框内输入"中国人民"时,自动从中提取"中国"."人民"等关键字并在数据库内进行搜索.看完本文后,你就可以发现,这个功能实现起来竟然是如此的简单. 第一步,我们要建立一个名为db_sample.mdb的数据库(本文以Access2000数据库为例),并在其中建立表T_Sample.表T_Sample包括如下字段: ID 自动编号 U_Name

在ASP.NET程序中存储和调用word文件

asp.net|word|程序 本文通过一个实例概要讲解如何在ASP.NET程序中配合SQL Server2000进行word文件的存储和调用过程(没有使用VBA ). (1) 建立数据库 首先,我们在数据库中建立一个表,表中有三个字段,fileName(varchar,50),postTime(datetime,8), fileContent(image,16),分别存储文件名称,上传时间和word文件的具体内容,其中fileName为主键.具体的SQL脚本如下: CREATE TABLE [

asp小偷程序中的字符串截取函数

函数|字符串|小偷程序 asp小偷程序中的字符串截取函数 以下是函数代码:'******************************************************************************** '    Function(公有) '    名称 :    字符串截取函数 '    作用 :    按指定首尾字符串截取内容(本函数为从左向右截取) '    参数 :    sContent ---- 被截取的内容 '        sStart ----

asp.net程序中最常用的三十三种编程代码

asp.net|编程|程序 asp.net程序中最常用的三十三种编程代码,为初学者多多积累经验,为高手们归纳总结,看了觉得很有价值~,大家不妨参考下!  1. 打开新的窗口并传送参数:   传送参数:  response.write("<script>window.open('*.aspx?id="+this.DropDownList1.SelectIndex+"&id1="+...+"')</script>") 

在ASP.NET程序中发送邮

asp.net|程序 如何在ASP.NET程序中发送邮件呢? 在ASP.NET程序中发送邮件不再象ASP中那样需要组件的支持了,在.NET的框架基类的System.Web.Mail名称空间内包含的MailMessage和SmtpMail类可以实现这个功能. 例如: Dim message As new Mail.MailMessage message.From = "web3@163.com" message.To = "web3@163.com" message.

如何在ASP.NET程序中显示程序集版本号

  于很多有趣的原因,ASP.NET程序中虽然可以往App_code目录中追加AssemblyInfo.cs文件,但位于该文件中的版本号总是无法正确的显示在用户面前. 如果你通过下面的语句企图像其他.NET应用程序一样获取Assembly中的版本号的话,你将永远得到一个0.0.0.0的字符串. System.Reflection.Assembly.GetAssembly(this.GetTyp e()).GetName().Version.ToString(); 很多人能说出一堆理由来告诉我企图

ASP.NET程序中常用编程代码

ASP.NET程序中常用编程代码 1.为按钮添加确认对话框 Button1.Attributes.Add("onclick","return confirm('确认?')");button.attributes.add("onclick","if(confirm('are you sure...?')){return true;}else{return false;}") 2.删除表格选定记录 //获得DataGrid主键in

ASP.NET程序中常用代码汇总_实用技巧

1. 打开新的窗口并传送参数: //传送参数: response.write("<script>window.open('*.aspx?id="+this.DropDownList1.SelectIndex+"&id1="++"')</script>") //接收参数: string a = Request.QueryString("id"); string b = Request.QueryS

改进 ASP 应用程序中的字符串处理性能

程序|性能|字符串|性能|字符串 摘要:大多数 Active Server Pages (ASP) 应用程序都要通过字符串连接来创建呈现给用户的 HTML 格式的数据.本文对几种创建此 HTML 数据流的方法进行了比较,在特定情况下,某些方法在性能方面要优于其他方法.本文假定您已经具备一定的 ASP 和 Visual Basic 编程方面的知识. 简介 编写 ASP 页面时,开发人员实际上是创建一个格式化的文本流,通过 ASP 提供的 Response 对象写入 Web 客户端.创建此文本流的方