下面调用COM对象,来实现Windows搜索服务的Web调用。这里可以使用的技术很多,如ASP,ASP.NET,JSP,PHP等。但是,从直接调用COM对象的方便程度来讲,ASP是最佳选择,ASP技术之所以至今还没有灭亡,它的强大之处就在于COM组件的调用。在ASP.NET中使用COM就很不地道了,JSP来调用COM组件,运行速度比较慢,PHP调用的速度还可以,要使用COM类库。
只要使用Windows服务器,用任何技术都可以构建出类似的搜索系统,但是,这里推荐用ASP技术。
这里要使用的组件是:索引服务查询组件,其建立方法如下:
dim ix Query"Index Server query object.
set ix Query=Server.Create Object("ixsso.Query")
这个查询组件包含很多属性,最常用的为Catalog,Columns,Sort By,Max Records和Query。
①Catalog属性:用来设定索引服务的编录,也就是程序执行时关联的编录,比如:
ixQuery.Catalog="test"
设定程序与“test”编录关联。
②Columns属性:可以设定对象返回的每个搜索结果所含有的属性列。索引服务查询组件返回的查询结果包含有很多属性,可以看到一部分。
如果使用ixQuery.Columns="doctitle,path,size,rank"就可以设定返回结果包含着四个属性。
③SortyBy属性:用来指定返回结果集的排序规则,比如:
ix Query.Sort By="rank[a]"
为按照rank列值升序排列(a代表Ascending),通常使用ixQuery.Sort By="rank[d]"。
即:按照rank列值降序排列(d代表descending)。
可以按多个列值组合排序,如:
ix Query.Sort By="rank[d],doctitle"
④Max Records属性:用来限定返回的最多结果数量,比如:
ix Query.Max Records=5
限定最多返回5条记录,即便有10000条记录符合条件,也只返回5条。
⑤Query属性:用来设定查询字符串,比如:
ix Query.Query="共工"
设定索引服务执行查询的关键词为“共工”。
对于前面设定的属性,可以用下面的方法来进一步限定结果,如:
@ size<100"文件必须小于100字节
@ write>2005/8/26 "文件必须在2005年8月26以后建立
与前面的关键词限定合起来就是:
ixQuery.Query="共工@ size<100,@ write>2005/8/26"
类似地,设定只在某一类型(如:.doc文件)的文件中查询,可以使用:
# filename*.doc
在设定好了这些属性之后,下面就可以执行检索了。使用过ADO组件的用户会对这个组件的使用方法感到非常熟悉。
首先建立查询结果集:
dim queryRS
set queryRS=ixQuery.CreateRecordSet("nonsequential")
然后对查询结果集进行遍历,即可将所有结果输出:
do while not queryRS.EOF
dim docTitle
docTitle=queryRS("doctitle")
if docTitle=""then docTitle="no title"
dim path
path=queryRS("path")
dim size
size=queryRS("size")
dim rank
rank=queryRS("rank")
response.write"<tr><td>"&; doctitle &;"</td><td>"&; path &;"</td>"
response.write"<td>"&; size &;"</td><td>"&; rank &;"</td></tr>"
queryRS.MoveNext()
loop
下面举例说明索引服务查询组件的使用,这个案例只含有一个文件。
案例名称:Web搜索
程序名称:ix Query.asp
<%
′
"作者:于天恩
"yutianen@163.com
′
"建立索引服务器查询对象
dim ix Query
set ix Query=Server.Create Object("ixsso.Query")
"设定使用的列
ixQuery.Columns="doctitle,path,size,rank"
"设定排序,按rank升序排列(从小到大)
ixQuery.SortBy="rank[a],doctitle"
"设定查询结果显示的最大值
ixQuery.MaxRecords=5
"设定对应的索引编录
ixQuery.Catalog="test"
"设定查询关键词
ixQuery.Query="共工"
"建立查询结果集
dim queryRS
set queryRS=ixQuery.CreateRecordSet("nonsequential")
"如果查询结果为空,停止执行
if queryrs.eof then
response.write"no result"
response.end
end if
"如果查询结果不为空,则显示结果
response.write"<table border=1bordercolor=red>"
response.write"<tr><td>num</td><td>doctitle</td><td>path</td><td>size</td><td>rank</td></tr>"
num=0
do while not queryRS.EOF
num=num+1
dim docTitle
docTitle=queryRS("doctitle")
if docTitle=""then docTitle="no title"
dim path
path=queryRS("path")
dim size
size=queryRS("size")
dim rank
rank=queryRS("rank")
response.write"<tr><td>"&; num &;"</td><td>"&; doctitle &;"</td><td>"&; path &;"</td>"
response.write"<td>"&; size &;"</td><td>"&; rank &;"</td></tr>"
queryRS.MoveNext()
loop
response.write"</table>"
%>
在这个例子的基础上,下面做一些调整,加上一个搜索框。
案例名称:Web搜索
程序名称:my.asp
<form action=my.asp>
<input name="so"><input type=submit value="search">
</form>
<%
′
"作者:于天恩