ASP实现网站智能分词搜索

用ASP实现搜索引擎的功能是一件很方便的事,可是,如何实现类似3721的智能搜索呢?比如,当在搜索条件框内输入“中国人民”时,自动从中提取“中国”、“人民”等关键字并在数据库内进行搜索。看完本文后,你就可以发现,这个功能实现起来竟然是如此的简单。

用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页所接收到的数据,并在数据库中进行搜索。

以下是代码片段:
<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-12-30 16:41:02

ASP实现网站智能分词搜索的相关文章

基于Gettext的asp.net网站多语言解决方案

asp.net|解决 很久以前就想写这篇blog,系统的介绍一下偶是如何使用Gettext给blogwind做多语言界面的-- 很不喜欢.net内置的多语言解决方案--因为,它使用xml--编辑xml是一件很痛苦的事情--我也不想给每个页面弄一堆resouce文件--光看着这些资源文件我就很晕-- 偶是从Django里面知道有Gettext这套在开源软件中广为使用的程序多语言解决方案的-- 最喜欢它的地方是它默认直接使用英文原文作为字符串的键值--而不是像.net默认的那样,给所有的字符串加上一

ASP\ASP.NET网站中怎么防止Access数据库被别人下载

 如何防止Access数据库下载是一个很老的话题了,网上的讨论也比较多.这里我们给出几种在ASP.NET下防止Access数据库被下载的方法. 我们这里假设Access数据库名字为 test.mdb. 1.把数据库放在WEB目录外 如你的网站目录是D:www,你可以把数据库放到D:data 这个文件夹里,然后修改网站程序中的数据库连接字串地址部分为:"D:datatest.mdb" ,这样数据库可以正常调用,但是无法下载的,因为它不在网站目录里. 假设在web.config中配置数据库

visual studio2015-在visual studio 2015中,在哪里打开ASP.net网站管理工具

问题描述 在visual studio 2015中,在哪里打开ASP.net网站管理工具 如题,跪求!!!QAQ在visual studio 2015中,在哪里打开ASP.net网站管理工具 解决方案 一些容易混淆的概念之Asp.net /Visual Studio为何我不能在我的VISUAL STUDIO .NET中创建ASP.NET项目(程序)用于 Visual Studio 和 ASP.NET 的 Web 应用程序项目部署概述 解决方案二: 这个应该是在系统的配置,右键我的电脑应该能找到,

ASP.NET网站导航及导航控件如何使用_实用技巧

网站导航? 传统的网站导航需要我们在是在页面上弄超链接的方式来实现的,在页面修改或移动的的时候需要一一在每个页中都要进行修改,这样会很麻烦. 在网站中建立网站地图,也就是把所有的链接地址放在一个专门的文件中进行统一管理,这样就很方面的进行管理. 怎么弄网站导航?怎么做? 需要在VS中新建网站地图文件,再把网站地图文件与我们想要的导航控件相关联,这样就可以实现导航的效果了,我们要更改某个地址,就直接在站点地图.siteMap文件中更改就行了. vs中如何添加网站地图? 在vs中新建项中选择"站点地

ASP.NET网站伪静态下使用中文URL的方法_实用技巧

首先解释一下,什么是中文URL呢?它并不是我们常见的把汉字编码为 %CF%EC 这种形式,而是在URL中直接使用汉字 这种形式目前还不是很多见.因为不同的浏览器处理起来可能会有所不同,不过据我测试,IE8和Firefox是完全支持的. 它的好处是可以使用链接地址看起来非常直观易懂!搜索引擎也支持. 先讲一下我的ASP.NET网站的伪静态,我的文件都是以.htm结尾的,实际上是动态的ASP.方法是:在后台将htm映射为aspx文件. 伪静态的规则,是在web.config文件中定义的. 形式一:

asp.net网站防恶意刷新的Cookies与Session解决方法_实用技巧

本文实例讲述了asp.net网站防恶意刷新的Cookies与Session解决方法,是WEB程序设计中非常实用的技巧.分享给大家供大家参考.具体实现方法如下: Session版实现方法: public double time; public const int freetime = 1;//防刷冰冻时间间隔,当前为1秒 #region 防恶意刷新 if (Session.SessionID == null) { Response.End(); } else if (Session["sionid

推荐一个学习asp的网站

问题描述 推荐一个学习asp的网站http://www.kejiweb.com/biancheng/Asp/里面有很多教程供大家学习,而且访问速度很快. 解决方案 解决方案二:a...看看解决方案三: 解决方案四:1楼的看了吗?能否提点意见呢?解决方案五:我看了,也收藏了,等有问题再细看共同学习解决方案六:谢谢,给我提点意见或建议吧,有很多功能还不完善.解决方案七:页面美感感觉有点粗糙...内容算丰富还不错!解决方案八:看了还可以,谢谢了.解决方案九:我也去看看解决方案十:访问速度慢打开时是纯文

14天的努力!终于研究出一个相样的ASP.NET网站,分享个图片给大家长长眼!!!

问题描述 14天的努力!终于研究出一个相样的ASP.NET网站,分享个图片给大家长长眼!!!14天的努力!终于研究出一个相样的ASP.NET网站,分享个图片给大家长长眼!!!14天的努力!终于研究出一个相样的ASP.NET网站,分享个图片给大家长长眼!!!注明一下:后台数据库为ACCESS版本的 解决方案 本帖最后由 sgzhou12345 于 2016-05-25 13:13:34 编辑解决方案二:牛逼解决方案三: 解决方案四:骚年,恭喜入门解决方案五:按钮点了有用吗解决方案六:不错加油!解决

关于在asp.net网站里加入一些ajax功能后

问题描述 由于项目的需要,在传统asp.net网站里加入了一些ajax功能,比如updatepanel,现在把程序发布到远端的服务器,那么服务器那边要安装什么有关AJAX的东西吗?在客户端,需要要求更高的浏览器版本吗?谢谢回答 解决方案 解决方案二:虽然问题可能有点弱智...没经验啊,有人提示下否解决方案三:是不是要把ajaxextension安装包在服务器那边装一下呢?还需要弄些别的吗解决方案四:不知道我没用过ajax.net全是自己写的帮顶解决方案五:不管你加了什么,调试通过,重新发布一次,