//Logo Image
作者:陳友凡 (2000-12-28);推薦:徐業良 (2000-12-29)
附註:本文為台灣有線視訊寬頻網路發展協進會委託研究計畫「知識服務供給者建立模式之研究」部份成果。

知識文件的搜尋-使用Microsoft Index Server

1. 全文檢索搜尋引擎

知識服務供給者(Knowledge Service Provider, KSP)網站主要的功能為知識的保存與傳播。一般所說的知識依其形態分為二大類,一類是經由整理而得以成為文字加以傳播,KSP的文案夾(archive)中,主要也是希望以知識文件的形式,保存此類型的知識;第二類則是無法用文字加以確實傳遞的知識,這類的知識大都只存在於個人的經驗中,通常只能利用師徒相傳的方式加以延續。

KSP中一個有效的知識擷取介面的存在是絶對必要的,這個知識擷取介面包含有“電子圖書館形式”、“計劃記錄文件”、“執行程序輔助”、“課程形式”等四種,其中除“執行程序輔助”外,均是以文件展現為主要的功能。使用者欲獲取所需的知識文件最直接也是最快速的方式,便是在電子圖書館搜尋出知識文件庫中含有特定關鍵宇的知識文件,因此在知識擷取介面中建立全文的搜尋引擎是絕對有其必要的。

目前所能獲得免費共享的全文搜尋引擎大都是利用“perl”語言所寫作的,但由於目前主要的perl程式均是由國外程式人員所完成,在雙位元字如中文或日文時會出現判斷上的問題,而且在server端也要另外安裝程式來提供執行的環境。第二個選擇是中正大學網際網路實驗室所完成的Gais搜尋引擎,其優點為對中文的完全支援,但由於在Win32環境下其為單獨的執行檔,因此不論入或輸出介面都無法更改。第三個方案是採用在“Microsoft Internet Information Server (IIS)”中所附的“Index Server”,目前本計畫建構之KSP知識擷取介面的搜尋引擎便是採用此種。

一般搜尋引擎的原理主要分為三種,第一類為將檔案一個一個打開並檢視其內容是否包含使用輸入的查詢字串,這種方法在檔案少且形態單純時較為常用,但檔案多時效能不佳。第二種為利用Html檔案檔頭中的“Meta”標籤來做搜尋,Html寫作者會在Meta標籤中填入該Html的關鍵字,搜尋程式便會利用每個html檔案的Meta標籤來做關鍵字搜尋而不是全文檢索。第三種全文檢索方式為大多數程式採用,程式會先檢視網頁中所有的檔案並製作一索引檔,這個檔案記錄各字元出現在那些檔案中,搜尋時便直接在索引檔中尋找以增加速度。本計畫採用之Microsoft Index Server便是利用第三種方式。

2. Microsoft Index Server的安裝和基本設定

Microsoft Internet Information Server(IIS)主要的功能為提供網際網路上的WWW (World Wide Web)FTP (File Transfer Protocol)檔案傳輸協定SMTP(Simple Mail Transfer Protocol)電子郵件服務NNTP(Network News Transfer Protocol)網路新聞群組傳輸協定等服務。IIS目前已進入第5版,其內的Index Server也與IIS4中的2.0版不同。由於目前KSP網站仍利用IIS4作為服務程式,因此在此仍以Index Server 2.0作為說明。

Index Server的安裝和IIS是結合在一起的,當安裝IIS4時僅需在欲安裝的元件選單中勾選Index Server便會安裝在腦上,同時在Index Server子項目中的“語言資源”選項中至少要選英文和繁體中文,不然會造成文字辨識上的錯誤(圖1)。在安裝IIS的過程中程式會詢問索引檔的放置位置(Index Server Catalog Directory)Index Server會在那個子目錄產生一個名為“Catalog.wci”的資料夾。所謂索引檔便是日後進行查詢時所利用的檔案,其中貯存有欲建立索引目錄下所有文件檔案內所包含文字出現的位置及所屬的檔案名稱。此外在安裝過程中會要求輸入索引檔的大小限制,這個限制的預設值為索引目標大小的40%,例如要被索引的目錄內含100Mbyte,其索引檔便會被限制在40Mbyte

1. 語言相容性選擇

Index Server中的索引檔可以超過一個,利用不同的“Catalog”來對數個不同的目標來做檢索。例如在網頁所屬的資料夾中有三個子目錄是日後搜尋時所需要被檢索的目標,但若僅使用一個索引檔便必需對一個同時包含這三個資料夾的資料夾來製作索引,而這個方式勢必會使得許多原本不想被編進索引內的檔案也被製作索引,造成索引檔檔案增大,且查詢時輸出的結果含有搜尋範圍以外的檔案。針對不同的目標製作索引檔的另一個優點為可以讓使用者針對自己有興趣的部分搜尋,達到這個目的僅需在搜尋介面上指定檢索時利用的索引檔便可。

Microsoft所屬的網路服務程式都是利用“Microsoft Management Console”來進行管理。打開此程式便會看到如圖2的畫面。此視窗分為二個窗格;A窗格稱為“領域窗格”,利用樹狀圖來展現被Management Console所管理的工作或服務;B窗格被稱為“結果窗格”顯示的是在A窗格中被選取的工作或服務所包含的子項目。圖中A窗格內“Index Server on Local Machine”便是已安裝好的Index Server,其所屬的一個已建立好名為“www”的索引便會顯示在B窗格中。

2. Microsoft Management Console 主畫面

Index Server剛安裝完成時由於沒有任何索引檔存在,B窗格內不會有任何內容,而新增索引的方式為在“Index Server on Local Machine”上按右鍵點選“新增”à “Catalog”(圖3),之後程式便會要求輸入catalog的名稱和此catalog所要建立索引的目錄4)。設定完成後重新啟動Index Server便會開始為這個目錄建立索引。

3. 新增Catalog

.

4. 新增Catalog的對話框

每個Index Server中的catalog都會顯示在Management Console的結果窗格中並顯示這個catalog的相關統計資料,列如表1

1. Catalog的相關資訊

名稱

說明

Catalog

這個catalog的名稱

Location

catalog的實體位置

Size

catalog的大小

Total Docs

catalog所包含的文件數目

Docs to filter

被系統索引的文件數目

Word lists

放置在記憶體中的索引數目

Persistent indexes

已貯存在電腦磁碟中的索引檔,索引檔的數目不可大於255

Status

catalog目前的狀態

要注意的是在Index Server停止時除了catalog的名稱外均是顯示“n/a”,每次重新啓動Index Server(如電腦重開機)時Index Server便會自動對索引檔作更新,每天零時程式也會將索引檔自動整理一次。

3. 搜尋介面的建立

執行Index Server的搜尋利用的是“Query.asp”這個程式。這個程式是安裝Index Server時便會附上的範例。Query.asp包含了整個查詢的輸入及輸出介面還有查詢的控制等。由於這個程式本身已可滿足我們的需求因此不另作修改,有修改的部分只有畫面展現的部分,詳述如後。

利用文字編輯器打開query.asp,被“<%”“%>”所包起來的部分便是實際ASP的程式碼,其中的內容會在先在www server作編譯後再傳到使用者端的電腦中成為使用者所看到的畫面,其餘的部分則和html中的tag相同。在一般的程式中一開始首要的工作便是定義變數,而query.asp中為了使用者修改的方便,所有的圖片均是由一開始的一系列變數來定義圖片的路徑,在之後的程式便只需要利用這個變數便可代表特定的圖片,如

<%……FormLogo = “searchlogo.gif”……%>

便是將“searchlogo.gif”這個字串指定給“FormLogo”這個變數,之後若有一段html語法如

<img src=”<%=Formlogo”%>”>

server端編譯後便成為

<img src=“searchlogo.gif”>

query.asp中需要針對本身網頁風格尚須修改的項目列表如表2

2. Query.asp中的自訂修改項目

變數名稱

功能

FormLogo

設定搜尋畫面上的logo

FormBG

設定畫面的背景顏色

FormScope

設定搜尋的目標資料夾

PageSize

設定結果顯示時每頁出現的筆數

SiteLocale

設定網頁的語系,如台灣是ZH-TW

此外另外一個檔案“is2foot.inc”被用來定義搜介面下方的頁面內容,傳統上是用來作版權宣告等,而在此則是將文件的分類表置於此,讓使用者除了搜尋外能直接進入任一文件類別的列表選取所需的文件。完成後整個搜尋介面的外觀和各設定的關係如圖4

5. 各設定項與搜尋畫面的關係

query.asp中針對的是index server中僅有一個catalog的情形,若所建立的catalog有二個以上便需要在程式中指定,在query.asp

<%set Q = Server.CreateObject(“ixsso.Query”)%>

這段程式的目的是在server端要求開啓Index Server以供查詢,並將其指到Q這個變數中,在其後加上

<% Q.Catalog = “Catalog_Name” %>

便可指定搜尋要使用的catalog。其中Catalog_NameIndex Server中所建立的catalog名稱。若這個值沒有指定Index Server會利用預設的catalog,預設的catalog是利用Windows NT中的“IsapiDefaultCatalogDirectory”這個registry項目中的 “CiCatalog”這個參數來指定。

4. 搜尋語法

一般的搜尋引擎為了增加使用的便利性都會有支援布林運算的能力,在Index Server中此類語法有“AND” “OR” “AND NOT” “NEAR”四種。

“AND”的功能為搜尋同時含有AND前後二個條件的文件,如“A AND B”便是搜尋同時含有AB的文件。符號“&”AND有相同的功能。

“OR”則是搜尋含有OR前後二個條件中的任一個條件的文件,如“A OR B”便會找出含有AB的文件。和AND類似,OR也可以利用“|”這個符號來代替。

“AND NOT”ANDNOT運算子的結合。如“A AND NOT B”代表包含A但不包含B的文件。NOT可由“!”來代替以簡化輸入,如AND NOT便可寫作“&!”,但NOT只可和接在AND之後。

“NEAR”為較特殊的運算子,它包含有AND的功能,但只會找出二個條件出現在一定距離(50個字元)以內的情形。NEAR的替代符號為“~”

在輸出結果時Index Server會給予每筆結果一個分數,在使用AND/OR時這個評分的標準為該條件在文件中出現的次數,但在使用NEAR時則是前後二個條件間的距離遠近作為評分的標準,距離愈近分數愈高。

當搜尋的條件式中含有運算子時,例如想找出含有“George and Mary”這個字串的文件,直接輸入George and Mary會被系統判定為要找的是“含有GeorgeMary二個字”的文件,因此在這種情形下便需要利用引號來將條件式包起來,如“George and Mary”。在數學運算上的括號也可用來指定條件的先後順序,如一個搜尋條件式“a AND b OR c”“c OR a AND b”“c OR (a AND b)”具有相同的結果,都是找出同時含有ab或含有c的文件,但若是“(c OR a) AND b”則會找出含有bac兩者之一的文件。

Index Server中同時也支援萬用字元,例如輸入“tan*”,便會找出所有含有以tan開頭文字的文件如tangenttank等。另一種使用方式為“**”,這個運算子會找出含有**之前這個字所有的衍生形態,例如輸入“fly**”會搜尋flyflownflewflying等,當然這個功能僅會對英文(拼音文字)有效果,對於東方的雙位元字尤其是中文是無法發揮功能的。

5. 新形態的網頁資料搜尋方式

搜尋一直是網際網路上最重要的能力之一,隨著各大搜尋引擎的持續更新也提供給使用者更多的便利。但對於需要網站內部搜尋功能的使用者來說,要使用這些功能強大的搜尋引擎一方面負擔不起,另一方面也沒有這麼多資料量來滿足這些軟體的能力。隨著利用資料庫來更新網站的技術愈來愈成熟,不論是ASPMicrosoft Access/SQL Server的組合,或PHPMySQL的搭配,網頁內容的建置者紛紛將文字貯存在資料庫的欄位中,日後在取用內容時便僅需將該欄位的內容取出顯示在使用者的畫面上。這個改變帶來的好處是網頁的管理者不再需要為了檔案放哪連結表也可以直接向資料庫要求各欄位的名稱即可自動產生。和本文相關的另一個好處便是網站內容的檢索變得更為方便,不論是何種資料庫軟體對於欄位內容的搜尋均是必需具備的基本能力,而且大都支援標準的SQL(Standard Query Language)指令,當網站的設計者想提供搜尋的功能時,不再需要四處尋找可用的執行檔或CGI程式並判斷其演算法是否正確,所需要的只是基本的程式能力和SQL指令,其他的就交給資料庫程式來處理便可。