關鍵字: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網站采納。