免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 841 | 回复: 0
打印 上一主题 下一主题

利用ASP打造站内搜索引擎 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-04-27 11:20 |只看该作者 |倒序浏览

利用ASP打造站内搜索引擎
苏驰
02-1-23 下午 02:43:33
不知你上网时注意到没有:一些内容丰富的网站,总建有一个内容搜索引擎,你只要输入你想阅读资料的类别(比如:windows98),一按“搜索”按钮,该网站所有关于“windows98”的文章列表就呈现在你的眼前,好不方便啊!要知道当自己想要查的资料老是找不到,整天按着“下一页”这个按钮把页面翻来翻去的,这真是一件烦心的事情。那么在网上建有家的朋友是不是也想在你的网站按一个这样的搜索引擎呢?在下面我介绍如何用ASP打造一个站内搜索引擎。当然了,我的这个搜索引擎是不能与那些门户网站的搜索引擎相比的。
注:由于搜索引擎的资料都是放在数据库内,所以要求大家对数据库该有一定的了解。在这里我选择MicroSoft的Access 2000当作存放资料的数据库,对个人网站的要求来讲已经绰绰有余了。数据库的表格名称和字段定义如下所示,我将数据库取名为Search.mdb。
表格名称
搜索引擎
字段名称
字段属性
文章编号
自动编号
文章标题
文字(255字符)
文章网址
文字(255字符)
内容简述
文字(255字符)
加入时间
日期/时间
访问次数
数字
最后一项"访问次数"可加可不加,如果你的网站有针对文章访问率作统计的话,那最好将他加上,可以让读者做个参考,其它几个字段应该都是不可或缺的(对内容网站而言)。数据库建好之后接下来就是要将资料输入了,由于本文主要是针对ASP的应用,所以对于数据库这部分我就不详解了,这一部份交给大家去完成,现在最重要的就是让我看看运行搜索功能的程序该如何编写的。
首先你需要一个输入搜索字符串的接口,这部分只需要一个简单的Html档就可以完成。我把它命名为Search.htm。
Search.htm
文章搜索:
接着就应进入本文的主题了。在这里我把这个程序命名为Search.asp。搜索引擎的运作过程如下所示:将字符串传递给Search.asp,将目前所在页数、搜索字符串、资料篇数传递至Search.asp,如果字符串是由按钮传来的。
YES
NO
NO
YES
NO
注:将目前所在页数、搜索字符串、资料篇数传递至Search.asp:
Search.asp
注:定义数据库的路径:
Dim MyConnectString
MyConnectString = "DRIVER={Microsoft Access Driver
(*.mdb)};DBQ=" & Server.MapPath("/asp/search/Search.mdb")
& ";DefaultDir=" & Server.MapPath("/asp/search") &
";DriverId=25;FILE=MS
Access;MaxBufferSize=512;PageTimeout=5"
注:打开数据库连结:
Dim Conn
Set Conn = Server.CreateObject("ADODB.Connection")
注:由数据库连结来打开数据库
Conn.Open MyConnectString
注:将搜索到的字符串作特殊处理:
strSearch1 = "
style='background:ff8000'>" & strSearchString & ""
注:开始定义数据库搜索语法
Dim strSQL, tmpSQL
strSQL = "SELECT * FROM 搜索引擎 WHERE "
tmpSQL = "内容简述 LIKE "
注:为了避免读者不小心在字符串中输入空格符而找不到数据,所以我在这时用了一点字符串处理的小技巧,定义空格符初始位置为1,找出输入字符串中空格符的位置。
Dim Pos
Pos = 1
While Pos > 0
Pos = InStr(1,strSearchString," ")
注:如果输入字符串中不包含空白字符串就不需要作字符串处理,直接进数据库比对资料:
If Pos = 0 Then
tmpSQL = tmpSQL & "'%" & strSearchString & "%' OR 文章标题
LIKE '%" & strSearchString & "%')"
注:如果输入字符串中包含空白字符串:
Else
注:将输入字符串以空白区隔开,当作个别搜索字符串,譬如搜索"电脑 超频",会变成搜索"电脑"、"超频",以"电脑 超频"而言,当运行mid(strSearchString, 1, pos-1)时,所得到的结果是显示从输入字符串的第一个字符到空格符所出现的位置(3)然后减1得到电脑两个字'而这时候搜索字符串已经变成"电脑"接下来先算出搜索字符串的长度len(strSearchString)=(5),再算出空格符加一后的位置然后运行:
Mid(strSearchString,Pos+1,len(strSearchString)),
这时就可以取出"电脑 超频"中的超频两个字,此时搜索字符串已经被分离成电脑和超频两个字了,如果你不用上面这段字符串处理程序,你会发现只要你的搜索字符串中含有空格符就会找不到数据;
tmpSQL = tmpSQL & "'%" & mid(strSearchString, 1, pos-1) & "%'
OR 文章标题 LIKE '%" & mid(strSearchString, 1, pos-1) & "%'
AND 内容简述 LIKE "
strSearchString =
Mid(strSearchString,Pos+1,len(strSearchString))
End If
Wend
注:将SQL语法分离的优点是弹性大,你不需要重复定义就可以无限次套用。
strSQL = strSQL & tmpSQL
strSQL = strSQL & " ORDER BY 文章编号"
经过字符串处理程序之后,此时完整的SQL语法将呈现如下的内容:'SELECT * FROM 搜索引擎 WHERE 内容简述 LIKE 电脑 OR 文章标题 LIKE 电脑 AND 内容简述 LIKE 超频 OR 文章标题 LIKE 超频 ORDER BY 文章编号。
注:下面建立数据库集合:
Dim rsResults
Set rsResults = Server.CreateObject("ADODB.Recordset")
rsResults.Open strSQL, conn,3
注:计算搜索到的资料总篇数,这时候的tmpSQL=(内容简述 LIKE 电脑 OR 文章标题 LIKE 电脑 AND 内容简述 LIKE 超频 OR 文章标题 LIKE 超频)
Dim rsTotalRecords
strSQL = "SELECT COUNT(*) FROM 搜索引擎 WHERE " & tmpSQL
Set rsTotalRecords = Conn.Execute(strSQL)
%>

0)才要运行资料略过的动作%>
0 Then %>
对不起,找不到你想要的资料.
回到搜索首页
找到篇记录

Dim Y
Y=0
While Not rsResults.EOF
iCurrentID = rsResults("文章编号")
%>
注:将文章标题含有搜索字符串的字加上特殊效果,并将转换后的结果传给Message变量,Replace函数的用法如下:例如你有一个字符串变量
AAA=”专业电脑网站”
如果你想将电脑这个字转变成Computer,你可以使用如下的方法:
AAA=Replace(AAA, “专业电脑网站”, “Computer”)
***结果AAA就变成专业Computer网站了***
Message = CStr(Replace(rsResults("文章标题
"),strSearchString,strSearch1)) %>
注:将内容简述含有搜索字符串的字加上特殊效果,并将转换后的结果传给Message1变量;
Message1 = CStr(Replace(rsResults("内容简述"),strSearchString,strSearch1)) %>

"> 、
访问次数:
rsResults.MoveNext
If Y=10 then
While Not rsResults.EOF
rsResults.MoveNext
Wend
End If
Wend
%>
0 Then %>
VALUE="">
">
">
">
VALUE="">
">
">
">
完成以上步骤,一个简单的站内搜索引擎就完成了,在网上显示的介面如下图:
mhtml:file://D:\计算机世界网-利用ASP打造站内搜索引擎.mht!http://www.ccw.com.cn/htm/app/aprog/02_1_23_2a.JPG
小结:
由于这个搜索引擎主要是针对个人网站的资料作搜索,所以在设计上并不太难,与一般门户网站的搜索引擎相比,其最大的差别就在于门户网站的数据库是以关联性和层次性的资料型态存在,而我所介绍的这个搜索引擎仅仅只包含一个层次而已,不过对那些单纯的内容个人网站来说却已是绰绰有余了。

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/17578/showart_105466.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP