初探Win2000索引服务的WEB应用

来源:互联网 发布:三维彩超数据计算男女 编辑:程序博客网 时间:2024/05/18 03:26

 

  摘要 在WWW上面有很多全文数据检索工具即搜索引擎(Search Engine),如Yahoo、新浪、
网易等。微软公司在Win2000里提供了一个工具Index Server,可以在自己的网站内部架设站
内的搜索引擎,即通过Web Server(IIS)和Index Server的交互,建立自己的搜索引擎。
关键字 Win2000 IIS Index Server ASP ADO 全文检索

1 前言
在网络时代,通过输入关键字,就能查到自己感喜好的资料,假如你制作了你自己网站,又想
提供站内的搜索功能,你就可以自己动手做一套属于你自己的站内搜索系统。Windows2000提供
了索引服务,缺省为未安装,通过在控制面板上的服务设置打开Index Server服务以后,就等于
拥有了一套个人专属的搜索引擎。 通过设置,大部分的时候都不需要人工干预, 在预设的情况
下,系统负担较轻时,Index Server就会找出系统指定的文件夹,一般是预设的WEB站点及预设
的FTP站点下所有的虚拟目录以及自己指定的硬盘上的文件夹,接着建立及维护存储文件的目录
信息。
当设置好Index Server以后,在前端输入查询条件,Index Server就会搜索这份索引,然
后以HTML的格式传回到前端,因为Index Server事先会建立文件索引, 搜索的速度将比全文
本的搜索快很多。

2 Index Server的对象和属性
2.1 被索引的文件类型
在WEB服务器下的所有文件,Index Server一般都会建立一份索引,这些文件有HTML文件、
ASP文件、Help File文件、文本文件以及Office软件制作的文件等,甚至可以是非文本的文件
类型,如可执行文件,当然,对这些文件无法通过有意义的文字来查询。
在实际运用中,我们一般关心的文件是文本类型文件,如网页等,基本上Index Server也能
够满足一般的应用要求。
2.2 Index Server查询规则
(1) 不区分大小写。
(2) 假如包含非凡字符如双引号或者其他非凡字符如逗号,赞叹号等,必须要用双引号将字符
包含起来。
(3) 多条件查询可以用逗号将关键字分开。
(4) 支持布尔运算符,例如AND、OR、NOT、NEAR、%26lt;、%26gt;等等。
2.3 Index Server查询对象
在Windows2000中,Index Server查询对象包含在Ixxso.dll之中,叫做Indexing Service
Server Side Object,即SSO,提供了建立及管理Recrodsets和查询的控制,利用SSO获得Index
Server建立的目录及文件索引,再用后端的描述语言VBscript或者javascript格式化传回前端。
SSO对象
Query对象

属性名称 数据类型 功能描述
AllowEnumeration Boolean 是否答应递归搜索目录索引,缺省是False
CiScope String 指定搜索的路径,多于一个路径的话用逗号分开
Columns String 从OLE DB Recordset取出的字段
MaxRecords Long 希望取得的记录数
Query String 查询限制条件
SortBy String 根据哪个字段排序

Query方法 Method
方 法 功 能 描 述
CreateRecordset 建立ADORecordset,有sequential和nonsequential
DefineColumn 给查询的字段定义一个别名
QueryToUrl 转换为URL参数
SetQueryFromURL 设定Query对象及相关内容

Utility对象
方 法 描 述
AddScopeToQuery 加入查询路径
HTMLEncode 给指定的字符串按照HTML编码
URLEncode 按照URL编码规则应用到给定的字符串

可用的文件信息
属性名称 功 能 功 能 描 述
Characterization 文件的摘要
DocAuthor 文件的作者
Rank 排名
DocSubject 文件的主题
DocTitle 文件的标题
FileName 文件名
Vpath 文件的完整虚拟路径
Size 文件大小(BYTE)


3 分页检索部分源代码摘要:
%26lt;%
Response.Buffer = True
MySelf = Request.ServerVariables( "PATH_INFO" )
Page = CLng(Request( "Page" ))
Path = Request( "Path" )
Keyword = Request( "Keyword" )
MaxRecords = CLng( Request( "MaxRecords" ) )

If Page %26lt;= 0 Then Page = 1
If Keyword = Empty Then Keyword = "新华网湖南频道"
If MaxRecords %26lt;= 0 Then MaxRecords = 50
Param = "%26amp;Keyword=" %26amp; Server.HTMLEncode(Keyword)
Param = Param %26amp; "%26amp;Path=" %26amp; Server.HTMLEncode(Path)
Param = Param %26amp; "%26amp;MaxRecords=" %26amp; MaxRecords
%%26gt;
%26lt;HTML%26gt;%26lt;BODY bgcolor="#FFFFFF" Background="../B.jpg"%26gt;%26lt;H2%26gt;Index Server 搜索引擎%26lt;HR%26gt;%26lt;/H2%26gt;
%26lt;FORM Action=%26lt;%=Myself%%26gt; METHOD=GET%26gt;
关键字摘要:%26lt;INPUT Type=Text Name=Keyword Value="%26lt;%=Keyword%%26gt;"%26gt;%26lt;BR%26gt;
路 径摘要:%26lt;INPUT Type=Text Name=Path Value="%26lt;%=Path%%26gt;"%26gt;
(可省略,输入具体路径如/news/2001-10-18)%26lt;BR%26gt;
最大文件数摘要:%26lt;INPUT Type=Text Name=MaxRecords Value="%26lt;%=MaxRecords%%26gt;"%26gt;%26lt;BR%26gt;
%26lt;INPUT Type=Submit Name=Send Value=" 搜 索 "%26gt;
%26lt;/FORM%26gt;%26lt;%
If Request ("Send") %26lt;%26gt; Empty Or Request ("Page") %26lt;%26gt; Empty Then
Set Q = Server.CreateObject ("ixsso. Query") ‘建立Query对象
If Path %26lt;%26gt; Empty Then
Set U = Server.CreateObject ("ixsso. Util") ‘建立Util 对象
U.AddScopeToQuery Q, Path, "deep" ‘设置查询方式和路径
End If
Q.Query = Keyword ‘关键字
Q.SortBy = "rank[d" ‘排序方式
Q.Columns = "DocTitle, Characterization, Rank, VPath, Write, Size" 需要的字段
Q.MaxRecords = MaxRecords ‘最大纪录数
Set rs = Q.CreateRecordSet("nonsequential") ‘建立记录集%%26gt;
%26lt;HR%26gt;
%26lt;BLOCKQUOTE%26gt;%26lt;%
Rs.PageSize = 5
If Page %26lt; 1 Then Page = 1
If Page %26gt; rs.PageCount Then Page = rs.PageCount
If Page %26lt;= 0 Then
Msg = "搜索结果摘要:没有找到任何符合条件的文件!"
Msg = Server.HTMLEncode( Msg )
Response.Clear
Response.Redirect Myself %26amp; "?Msg=" %26amp; Msg %26amp; Param
End If
rs.AbsolutePage = Page
For iPage = 1 To rs.PageSize
RecNo = (Page - 1) * rs.PageSize + iPage
%%26gt;
%26lt;B%26gt;%26lt;%=RecNo %26amp; ". "%%26gt;%26lt;%=rs("DocTitle")%%26gt;%26lt;/B%26gt;%26lt;BR%26gt;
%26lt;B%26gt;摘要摘要:%26lt;/B%26gt;%26lt;%=rs("Characterization")%%26gt;%26lt;BR%26gt;
%26lt;B%26gt;网址摘要:%26lt;/B%26gt;%26lt;A HREF=%26lt;%=rs("vPath")%%26gt;%26gt;%26lt;%=rs("vPath")%%26gt;%26lt;/A%26gt;%26lt;BR%26gt;
%26lt;B%26gt;时间摘要: %26lt;/B%26gt;%26lt;%=rs("Write")%%26gt;%26lt;BR%26gt;
%26lt;B%26gt;大小摘要: %26lt;/B%26gt;%26lt;%=rs("Size")%%26gt;%26lt;P%26gt;
%26lt;% rs.MoveNext
If rs.EOF Then Exit For
Next
%%26gt;%26lt;/TABLE%26gt;%26lt;/BLOCKQUOTE%26gt;
%26lt;DIV ALIGN=right%26gt;%26lt;FORM Action=%26lt;%=Myself%%26gt; Method=GET%26gt;%26lt;HR%26gt;
%26lt;%If Page %26lt;%26gt; 1 Then ' 假如不是位于第一页 %%26gt;
%26lt;A HREF=%26lt;%=Myself%%26gt;?Page=1%26lt;%=Param%%26gt;%26gt;第一页%26lt;/A%26gt;
%26lt;A HREF=%26lt;%=Myself%%26gt;?Page=%26lt;%=(Page-1)%%26gt;%26lt;%=Param%%26gt;%26gt;上一页%26lt;/A%26gt;
%26lt;%End If
If Page %26lt;%26gt; rs.PageCount Then ' 假如不是位于最后一页%%26gt;
%26lt;A HREF=%26lt;%=Myself%%26gt;?Page=%26lt;%=(Page+1)%%26gt;%26lt;%=Param%%26gt;%26gt;下一页%26lt;/A%26gt;
%26lt;A HREF=%26lt;%=Myself%%26gt;?Page=%26lt;%=rs.PageCount%%26gt;%26lt;%=Param%%26gt;%26gt;最后一页%26lt;/A%26gt;
%26lt;%End If%%26gt;
输入页号摘要:%26lt;INPUT TYPE=TEXT Name=Page SIZE=3%26gt;
页号摘要:%26lt;FONT COLOR="Red"%26gt;%26lt;%=Page%%26gt;/%26lt;%=rs.PageCount%%26gt;%26lt;/FONT%26gt;
%26lt;/FORM%26gt;%26lt;/P%26gt;%26lt;/DIV%26gt;
%26lt;%End If%%26gt;
%26lt;%If Request("Msg") %26lt;%26gt; Empty Then %%26gt;
%26lt;HR%26gt;%26lt;FONT Color=Red%26gt;%26lt;%=Request("Msg")%%26gt;%26lt;/FONT%26gt;
%26lt;%End If%%26gt;%26lt;/BODY%26gt;%26lt;/HTML%26gt;

4 小结
通过运用index sever对象属性,就可以达到站内搜索功能的很好效果,增加了网站的功能,不
需要外部的搜索,提高了查找效率,方便了网站浏览,在网站的运行里面,该搜索系统表现良好,速
度也很快,界面也很类似我们经常使用的互联网上一些闻名的搜索引擎。
参考文献
微软公司 http摘要://www.microsoft.com
清华大
学出版社 廖信彦著,ASP应用大全-ASP和数据库整合,2000年.

原创粉丝点击