用asp编写类似搜索引擎功能的代码

作者:佚名 来源:code-123.com 时间:2008-10-23 15:55:00 



首先建一个access 数据库,库中有一个URLINDEX表,其中URL和Keywords字段分别添加了索引,如下:


URL             文本 (索引:有(无重复))
Title            文本
Description 文本
Summary    文本
Keywords   文本(索引:有(无重复))

程序文件doquery.asp,代码:


<HTML><HEAD><TITLE>简单搜索引擎</TITLE></HEAD>
<BODY BGCOLOR=#ffffff MARGINWIDTH="0" MARGINHEIGHT="0" 
LEFTMARGIN=0 TOPMARGIN=0> 
<FORM METHOD="post" ACTION="doquery.asp?act=search">
 Query: <INPUT TYPE="Text" NAME="QueryString"><BR>
 <INPUT TYPE="Submit" VALUE="Submit">
</FORM>
</CENTER>

<%
dim act
act=request("act")
if(act="search") then
 QueryString = Request.form( "QueryString" )
 QueryWords  = Split( QueryString )
 strIndent   = "          "
 
 &rsquo; 如果搜索为空则返回
 If QueryString = "" Then
  Response.Redirect( "default.asp" )
 End If
 
 Session.timeout = 2
 If IsObject(Session("sitesearch_conn")) Then
     Set conn = Session("sitesearch_conn")
 Else
     Set conn = Server.CreateObject("ADODB.Connection")
     conn.open "driver={Microsoft Access Driver (*.mdb)};dbq=" & Server.MapPath("database/SiteSearch.mdb"),"",""
     Set Session("sitesearch_conn") = conn
 End If

 &rsquo; 查询语句
 sql = "SELECT * FROM [URLIndex] WHERE" 
     
 &rsquo;搜索Description字段
 sql = sql & " ( [Description] LIKE &rsquo;%" & QueryWords( 0 ) & "%&rsquo;"   &rsquo; First
 For i = LBound( QueryWords ) + 1 to UBound( QueryWords )
  If QueryWords( i ) <> "" and UCase( QueryWords(i) ) <> "OR" and UCase( QueryWords(i) ) <> "AND" Then
   If uCase( QueryWords( i-1 ) ) = "OR" Then
    sql = sql & " OR [Description] LIKE &rsquo;%" & QueryWords( i ) & "%&rsquo;"
   Else
    sql = sql & " AND [Description] LIKE &rsquo;%" & QueryWords( i ) & "%&rsquo;"
   End If
  End If
 Next

 &rsquo; 搜索Keywords字段 
 sql = sql & " ) OR ( [Keywords] LIKE &rsquo;%" & QueryWords( 0 ) & "%&rsquo;"
 For i = LBound( QueryWords ) + 1 to UBound( QueryWords )
  If QueryWords( i ) <> "" and UCase( QueryWords(i) ) <> "OR" and UCase( QueryWords(i) ) <> "AND" Then
   If uCase( QueryWords( i-1 ) ) = "OR" Then
    sql = sql & " OR [Keywords] LIKE &rsquo;%" & QueryWords( i ) & "%&rsquo;"
   Else
    sql = sql & " AND [Keywords] LIKE &rsquo;%" & QueryWords( i ) & "%&rsquo;"
   End If
  End If
 Next 

 &rsquo;  搜索Title字段  
 sql = sql & " ) OR ( [Title] LIKE &rsquo;%" & QueryWords( 0 ) & "%&rsquo;"
 For i = LBound( QueryWords ) + 1 to UBound( QueryWords )
  If QueryWords( i ) <> "" and UCase( QueryWords(i) ) <> "OR" and UCase( QueryWords(i) ) <> "AND" Then
   If uCase( QueryWords( i-1 ) ) = "OR" Then
    sql = sql & " OR [Title] LIKE &rsquo;%" & QueryWords( i ) & "%&rsquo;"
   Else
    sql = sql & " AND [Title] LIKE &rsquo;%" & QueryWords( i ) & "%&rsquo;"
   End If
  End If
 Next

&rsquo; 搜索Summary字段 
 sql = sql & " ) OR ( [Summary] LIKE &rsquo;%" & QueryWords( 0 ) & "%&rsquo;"
 For i = LBound( QueryWords ) + 1 to UBound( QueryWords )
  If QueryWords( i ) <> "" and UCase( QueryWords(i) ) <> "OR" and UCase( QueryWords(i) ) <> "AND" Then
   If uCase( QueryWords( i-1 ) ) = "OR" Then
    sql = sql & " OR [Summary] LIKE &rsquo;%" & QueryWords( i ) & "%&rsquo;"
   Else
    sql = sql & " AND [Summary] LIKE &rsquo;%" & QueryWords( i ) & "%&rsquo;"
   End If
  End If
 Next

 sql = sql & " )" 

  &rsquo; 
    Set rs = Server.CreateObject("ADODB.Recordset")
    rs.Open sql, conn, 3, 3     
    
    Response.Write "<BR><B> 你搜索的是: </B> " & QueryString    
    
    Response.Write "<BR><B> 搜索的关键字: </B> "
 For i = LBound( QueryWords ) to UBound( QueryWords )
  Response.Write "<BR>" & strIndent & i & ": " & QueryWords( i )
 Next

    &rsquo; Print the SQL String
    Response.Write "<BR><B> sql 语句 : </B> " & sql
 
 &rsquo; Print the Results
    Response.Write "<BR><B> 结果    : </B> <UL>"
 On Error Resume Next
 rs.MoveFirst
 Do While Not rs.eof
  Response.Write "<BR>" & "<A HREF=&rsquo;OpenPage.asp?IndexURL=" & rs.Fields("URL").Value & "&rsquo;>" & rs.Fields("Title") & "</A> - " 
  Response.Write rs.Fields("Description") & "<BR>"
  Response.Write "     <FONT SIZE=2>URL: " & rs.Fields("URL") & "</FONT>"
  Response.Write "<HR SIZE=1 WIDTH=200 ALIGN=LEFT>"
  rs.MoveNext
 Loop
 Response.Write "</UL>"
 
end if   
%>

</BODY>
</HTML>



标签:
0
投稿

猜你喜欢

  • 用Flash来作浏览历史功能

    2009-08-11 14:47:00
  • 认识Javascript数组

    2009-08-27 15:26:00
  • 用css3-tranistions实现平滑过渡

    2009-12-23 19:24:00
  • asp MD5加密方式使用建议

    2011-03-30 11:17:00
  • 用doctype激活浏览器模式

    2009-06-15 19:02:00
  • 跨浏览器实现float:center,No CSS hacks

    2008-08-22 12:59:00
  • 修改asp代码防止被杀毒软件误删

    2007-10-07 12:32:00
  • SQL SERVER EXPRESS 常见问题及解决办法

    2008-09-13 19:07:00
  • JavaScript实现带自动提示的文本框效果代码

    2011-02-05 11:13:00
  • 重新阅读《HTTP协议基础》

    2008-04-04 17:40:00
  • 兼容IE和FF的收藏本站、设为首页代码

    2009-01-07 14:14:00
  • 如何防范利用刷新来“作弊”的计数器?

    2009-11-22 17:18:00
  • IE7的web标准之道 Ⅲ

    2008-08-20 12:55:00
  • SQL Server 数据库操作实用技巧锦集

    2009-01-20 13:20:00
  • 三种禁用FileSystemObject组件的方法

    2007-09-23 15:52:00
  • fso怎样判断一个盘上是否有文件

    2007-09-26 12:35:00
  • 使用 JSON 进行数据传输

    2008-06-15 07:12:00
  • Web开发的改良

    2009-06-25 14:34:00
  • 十万条Access数据表分页的两个解决方法

    2008-05-23 18:24:00
  • 说说页面中header的XHTML结构选择

    2008-06-09 12:49:00
  • asp之家 网络编程 m.aspxhome.com