首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> VC >> 關於VC++

利用 Microsoft Index Server 建立全文檢索知識庫完整指南

     編輯:關於VC++

身為一名資料蒐集愛好者,我電腦裡累積了超過 250 MB 的技術文章,雖然按時間與目錄分類妥善存放,但每次需要查找特定內容時卻極不方便。為了解決這個痛點,我決定自行建立一套全文索引的知識庫系統。

方案選型:Index Server vs. SQL Server 全文檢索

在技術選型階段,主要考慮兩個候選方案:SQL Server 內建的全文檢索功能,以及 Windows 內建的 Index Server。經過詳細需求分析後,最終選擇 Index Server,主要基於以下四大考量:

  • 資料導入成本高:SQL Server 方案需將硬碟上的文件逐一匯入資料庫,工程量龐大;且資料庫差異備份機制無法滿足「第一次全備 + 前 N 次差異備」的累加邏輯。
  • HTML 圖片處理困難:大量文章為帶圖片的 HTML 格式,存入 SQL Server 的 image 欄位會產生一對多關聯難題,且檢視時必須透過程式讀取,不如直接在硬碟開啟便利。
  • 索引更新非即時:SQL Server 全文檢索的填充作業無法即時進行,影響搜尋時效性。
  • 維護彈性不足:未來需支援按時間、目錄拆分知識庫,以及擴充支援 aspx、pdf 等格式,Index Server 架構更具彈性。

Index Server 實作步驟詳解

1. 建立索引編錄

於 Windows 2000/XP 環境下,透過「電腦管理」→「服務與應用程式」→「索引服務」啟動索引功能。預設存在 System 與 Web 兩個編錄,右鍵選擇「新增編錄」,指定名稱(本例為 KB)與索引檔案存放路徑(D:\KB),建議將索引檔案置於獨立硬碟以提升效能。

2. 設定索引範圍

在新建編錄的「屬性」→「追蹤」分頁中,選取欲索引的 Web 網站;接著透過「目錄」節點新增欲納入索引的實體目錄(本例為 D:\知識庫\C#知識庫)。

前端查詢程式實作(C# + OLE DB)

Index Server 提供 MSIDXS OLE DB Provider,可直接以 SQL-like 語法查詢。以下為核心查詢程式碼:

private void BT_Search_Click(object sender, System.EventArgs e)
{
    string constr = "PROVIDER=MSIDXS;DATA SOURCE=KB";
    using (OleDbConnection con = new OleDbConnection(constr))
    {
        try
        {
            OleDbCommand cmd = new OleDbCommand();
            cmd.Connection = con;
            cmd.CommandText = "SELECT Rank, FileName, Create, Access, Path " +
                              "FROM SCOPE() " +
                              "WHERE CONTAINS('\"' + TB_Text.Text + '\"')";
            
            OleDbDataAdapter da = new OleDbDataAdapter(cmd);
            DataSet ds = new DataSet();
            da.Fill(ds);
            dataGrid1.DataSource = ds;
        }
        catch (Exception ex)
        {
            Console.Write(ex.Message);
        }
    }
}

擴充支援額外檔案格式

透過註冊表新增 Persistent Handler 即可擴充索引支援格式:

  • ASPX/ASCX:在 HKEY_CLASSES_ROOT\.aspx\PersistentHandler 及 .ascx 設定值為 {eec97550-47a9-11cf-b952-00aa0051fe20}
  • PDF:Adobe 官網提供官方 Filter 套件,安裝即可支援

常用索引欄位對照表(附錄)

欄位名類型說明
Rank數字相關性分數 0~1000,越高越符合
FileName字串檔案名稱
Path字串完整實體路徑含檔名
DocTitle字串文件標題(來自文件內部屬性)
DocAuthor字串文件作者
Create / Write / Access日期時間建立/修改/存取時間
Size數字檔案大小(位元組)
Characterization字串Index Server 自動產生的文件摘要
HitCount數字符合查詢字詞的出現次數

本方案無需將文件搬移進資料庫,保留原始檔案結構,查詢效能優異,且擴充性極佳,非常適合中小型知識庫建置需求。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved