用ASP實現對Web搜索引擎 Index Server的訪問
王宇 仝海生
摘要:Index Server是專門為企業Web網站設計的專業搜索引擎,傳統的訪問方法HTML/IDQ/HTX由於固有的特性,缺乏靈活性。本文介紹用ASP實現對Index Server訪問的兩種方法,以及如何實現複雜查詢,和對查詢結果的控制。
關鍵字:Index Server ASP ADO
在電子商務方興未艾的今天,企業上網不但是為了展示企業形象,提高知名度;也意味著無窮的商機與財富。而內部網Intranet則為企業帶來了全新的溝通方式和管理理念。因此構建企業Web站點已經排上了許多企業信息部門的日程。Web的優點在於可以方便的展示大量信息,但同時也帶來了信息的氾濫使得尋找有效信息非常困難。為此,好的企業網站都擁有強大的搜索引擎,使得網站更加友好和便利。對於有政策法規、合同定單等大量文檔上網的企業網站,信息搜索的服務必不可少。
Index Server是專門為企業網站設計的專業搜索引擎,利用它可以非常輕鬆的在網站中加入功能強大的信息搜索功能。並且Index Server搜索的文件不局限於HTML格式,還支持TXT、DOC、EXL、RTF、GIF、JPEG等多種文件格式,並可以通過插入第三方插件來支持更多的文件格式。搜索範圍可以是存放在本地服務器中的內容,也可以是網絡中其他機器的共享資源,包括INTERNET中的資源。搜索時除了文檔中的關鍵字詞以外,還可以就文件大小、修改日期、作者等屬性進行搜索。此外Index Server還支持英文、簡體中文、德語、法語、日語等語種,無須編程,就可在網站中實現多語種的搜索引擎。由於Index Server是零維護設計,故只需啟動Index Server服務,搜索引擎就會自動運行。而在Web服務器端,需要加入與Index Server連接的頁面。
傳統Index Server的工作過程由瀏覽器通過HTML文檔的FORM表單向Web服務器發出請求開始,Web服務器通過一個類似於數據庫接口的專用文件.IDQ與Index Server連接,將客戶的請求轉換成Index Server理解的語句。Index Server再將查詢結果按照模板文件HTX定義的格式組織成HTML文檔,通過Web服務器返回給瀏覽器。這種方式稱為HTML/IDQ/HTX方式,需要三個文件配合完成查詢。使用這種方式不能對查詢結果進行處理,並且模板文件HTX格式單一。因此微軟在Index Server 2.0 中加入了對Active Server Scripts的支持,用一個ASP文件替代先前的三個文件。由於ASP有靈活且功能強大的腳本語言操縱,因此Web開發者可以設計條件複雜的查詢,並能更加精確的處理查詢結果。

圖1.ASP訪問Index Server工作過程
熟悉Index Server 1.0 或 1.1版本的用戶,可以在ASP文件中使用Index Server query object,對像參數和查詢語句都和傳統的.IDQ文件保持一致。此外,還可以利用ADO 技術創建對象,用標準數據庫查詢語言Structured Query Language (SQL)語句定義查詢。兩種對象都以ADO記錄集(Recordsets)的形式返回結果。因此對於數據庫Recordset操作的代碼可以直接用於查詢結果。
ASP文件要完成查詢,首先要在文件中定義一個表單用於接收查詢要求,表單的動作指向ASP文件本身。本例中用名為SearchString的文本框接收查詢字段。
eg.1 在sample .asp文件中定義查詢表單 |
<FORM ACTION = "sample .asp" METHOD="GET">
<TABLE >
<TR>
<TD>輸入欲搜索關鍵詞:</TD>
</TR>
<TR>
<TD><INPUT TYPE="TEXT" NAME="SearchString" SIZE="40" VALUE=""></TD>
<TD><INPUT TYPE="SUBMIT" VALUE="GO"></TD>
</TR>
</TABLE> |
接下來在ASP文件中建立Index Server 查詢對象,並為Index Server 參數賦值。
方法1.利用Index Server query object和參數 |
<%
Set Q= Sever.CreatObject(「ixsso.Query」) 『創建查詢對像
Set Util= Sever.CreatObject(「ixsso.Util」)
Q.Query= Request(「SearchString」) 『查詢字段
Q.SortBy=」rank[d]」 『按照符合程度降序排列
Q.Columns=」DocTitle,vpath,filename,size,write,characterization,rank」
『返回記錄屬性
Q.MaxRecords=300 『最多返回記錄數
Util.AddScopeToQuery Q,」/」,」DEEP」 『搜索所有子目錄
Q.LocaleID=Util.ISOToLocaleID(「ZH-CN」) 『指定所用語言為簡體中文
Set RS = Q.CreateRecordSet("nonsequential") 『創建輸出集
%> |
方法2.利用ADO query object和SQL語句 |
<%
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.ConnectionString = "provider=msidxs;"
Conn.Open
Set AdoCommand = Server.CreateObject("ADODB.Command")
Set AdoCommand.ActiveConnection = Conn
AdoCommand.CommandText = "Select DocTitle,vpath,filename,size,write,」&
「characterization,rank FROM SCOPE() WHERE CONTAINS (』」&
SearchString &」』) ORDER BY rank DESC」
Set RS = Server.CreateObject("ADODB.RecordSet")
RS.open AdoCommand
%> |
創建包括文件大小、作者等屬性的複雜條件的查詢,可在表單中加入輸入相應限定條件的域,如圖2所示。
圖2.帶限定條件的複雜查詢表單
提交表單後各值由Query語句接收,如以下一個Query語句:
Q. Query=「 (@DocAuthor 」+ DocAuthorRestriction +「) & (@Write >」 +
FMModDate + 「) & (@Size 」+ FSRest + FSRestVal +「) & @Contenets」+
SearchString |
其中,DocAuthorRestriction、FMModDate、FSRest、FSRestVal、SearchString分別代表瀏覽器端輸入的作者、修改時間、比較符號、比較大小和關鍵字詞等值。此外Index Server還支持自然語言查詢(Free Text Queries),如可輸入語句:「怎樣使用Index Server管理工具?」。並在Query字段中添加標記$ Contenets。Index Server將進行語法分析,自動生成查詢語句。
如前所述,兩種查詢對像返回的結果都是ADO記錄集(Recordsets),因此可以用數據指針來操作輸出。
eg.2 在sample .asp文件中定義輸出格式 |
<% if Not RS.EOF %>
<table border=0>
<colgroup width=105>
<% end if %>
<% Do While Not RS.EOF %>
<tr>
<td valign=top >
<a href="<%=RS("vpath")%>" ><%= Server.HTMLEncode( RS("filename") )%>
</a></td>
<td valign=top>
<%if VarType(RS("characterization")) = 8 and RS("characterization") <> "" then%>
<b><I>摘要 </I></b><%= Server.HTMLEncode(RS("characterization"))%>
<%end if%>
<p><a href="<%=RS("vpath")%>" >http://<%=Request("server_name")%>
<%=RS("vpath")%></a></p>
</td>
</tr>
<%
RS.MoveNext
Loop
%>
</table> |
根據需要,還可以輸出作者、文件大小、創建時間等屬性。比較常見的還有把文件符合查詢的程度劃分為五個級別,分別用不同數目的星圖標識,這是傳統的HTX文檔無法實現的功能。
結合ASP和 Index Server,我們可以開發出功能強大的搜索引擎應用。實施簡單方便,沒有特殊的編程要求,並且搜索的速度和準確度也比較理想,非常適合企業級Web網站採納。
|
|