ASP智能搜索的实现_应用技巧

用ASP实现搜索引擎的功能是一件很方便的事,可是,如何实现类似3721的智能搜
索呢?比如,当在搜索条件框内输入“中国人民”时,自动从中提取“中国”、
“人民”等关键字并在数据库内进行搜索。看完本文后,你就可以发现,这个功
能实现起来竟然是如此的简单。OK,Follow Me!
    第一步,我们要建立一个名为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><br>  
                        <!-- 显示部分详细内容 -->
                        <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-10-24 17:49:54

ASP智能搜索的实现_应用技巧的相关文章

asp.net和ajax实现智能搜索功能代码_实用技巧

第一步,先做好搜索页面 复制代码 代码如下: <%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default.aspx.vb" Inherits="_Default" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://

ASP实现智能搜索实现代码_应用技巧

<% Function AutoKey(strKey) Const lngSubKey=2 lngLenKey=Len(strKey) Select Case lngLenKey Case 0   '若为空串,转到出错页  Response.Redirect "Error.htm" Case 1   '若长度为1,则不设任何值  strNew1="" strNew2="" Case Else  '若长度大于1,则从字符串首字符开始,循环取长

ASP智能搜索的实现

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

利用ActiveX控件InetCtls.Inet在ASP中实现新闻小偷_应用技巧

这几天维护网站的时候要加很多的新闻或者其它文章,因为经常到一个网站上找文章,所以就想,能不能做个程序,指定一个网址,让ASP去搜索这个网址上所有的文章,进而把搜索回来的文章进行分析,把文章内容保存到数据库里,这样不就可以省去很多麻烦了吗? 后来才知道,这个想法早就有人想过,也有人做过新闻小偷,呵呵,不过据说是php的,我没见过,呵呵,反正报着一种开发的心态开始进行工作-- 我记得以前收集的有一篇文章介绍的有如何用ASP获取别人的网页,拿出来一看,嗨,没几句代码: URL = http://new

asp.net 页面版文本框智能提示JSCode (升级版)_实用技巧

原本准备在上一篇中直接修改的,无奈编辑功能太差,打开一堆html代码,空格" "都看的人眼花缭乱,只好另开一篇. 升级说明:添加了针对一个界面多个职能提示位置的设定,只需修改文本框onfocus="fnStartInterval(this,'DropDownList2')", 设置好相应的参数即可,同时修复了在IE6下div无法遮盖下拉列表的问题,(IE6下无论如何设置select的z-index或div的z-index属性均无济于事),关于这个就是利用了一个ifr

基于ASP.NET的lucene.net全文搜索实现步骤_实用技巧

在做项目的时候,需求添加全文搜索,选择了lucene.net方向,调研了一下,基本实现了需求,现在将它分享给大家.理解不深请多多包涵. 在完成需求的时候,查看的大量的资料,本文不介绍详细的lucene.net工程建立,只介绍如何对文档进行全文搜索.对于如何建立lucene.net的工程请大家访问 使用lucene.net搜索分为两个部分,首先是创建索引,创建文本内容的索引,其次是根据创建的索引进行搜索.那么如何对文档进行索引呢,主要是对文档的内容进行索引,关键是提取出文档的内容,按照常规实现,由

改进 ASP 的字符串处理性能_应用技巧

大多数 Active Server Pages (ASP) 应用程序都要通过字符串连接来创建呈现给用户的 HTML 格式的数据.本文对几种创建此 HTML 数据流的方法进行了比较,在特定情况下,某些方法在性能方面要优于其他方法.本文假定您已经具备一定的 ASP 和 Visual Basic 编程方面的知识. 目录 简介 ASP 设计 字符串连接 快捷的解决方案 StringBuilder 内置方法 测试 结果 小结 简介 编写 ASP 页面时,开发人员实际上是创建一个格式化的文本流,通过 ASP

ASP 快速执行动态网页_应用技巧

这是一篇关于怎样精简代码和Asp 特征以获得最快执行速度的详细文章.对于一个急燥的用户来说,任何在按下用户按钮到结果出现在它们的屏幕之间的延迟可能意味着它们会转到浏览其它的站点?假如你的是商业站点,这有可能意味着失去潜在的销售. 我们没有任何办法控制用户的带宽,但我们的确能通过优化Asp 站点来获得最佳的*能.大部分潜在*能的提升是通过系统改变而不是紧缩代码,一个不合适的想法是,一旦遇到系统效率问题,就向系统**者提意见要其升级系统. 首先,哪个因素可能影响Asp的*能?很不幸,有很多因素?下面

值得收藏的asp.net基础学习笔记_实用技巧

值得收藏的asp.net基础学习笔记,分享给大家. 1.概论 浏览器-服务器 B/S 浏览的  浏览器和服务器之间的交互,形成上网B/S模式 对于HTML传到服务器  交给服务器软件(IIS)  服务器软件直接读取静态页面代码,然后返回浏览器 对于ASPX传达服务器  交给服务器软件(IIS)   IIS发现自己处理不了aspx的文件,就去映射表根据后缀名里找到响应的处理程序(isapi,服务器扩展程序) 问题:IIS如何调用可扩展程序? 答:可扩展程序首先就是按照IIS提供的借口实现代码,所以