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

SQL Server 7.0/2000 全文檢索架構與實作完整教學

     編輯:關於SqlServer

全文索引 vs 一般索引:核心差異

特性一般索引全文索引
建立方式CREATE INDEX / 約束系統預存程序
更新機制DML 自動同步排程填充 / 變更追蹤
每表數量多個僅一個
儲存位置資料庫檔案檔案系統 (全文目錄)
查詢語法WHERE col = 'val'CONTAINS / FREETEXT

六步建立流程(系統預存程序)

  1. sp_fulltext_database 'enable' — 啟用資料庫全文功能
  2. sp_fulltext_catalog 'FT_Catalog', 'create' — 建立全文目錄
  3. sp_fulltext_table 'TableName', 'create', 'FT_Catalog', 'UniqueIndexName' — 註冊表(需唯一索引/主鍵)
  4. sp_fulltext_column 'TableName', 'ColumnName', 'add' — 加入全文索引欄位
  5. sp_fulltext_table 'TableName', 'activate' — 啟用表全文索引
  6. sp_fulltext_catalog 'FT_Catalog', 'start_full' — 完整填充目錄

完整範例:Pubs 資料庫 Titles 表

USE pubs;
GO
-- 1. 啟用資料庫全文功能
IF DATABASEPROPERTY('pubs', 'IsFulltextEnabled') = 0
    EXEC sp_fulltext_database 'enable';
GO

-- 2. 建立全文目錄
EXEC sp_fulltext_catalog 'FT_Pubs', 'create';
GO

-- 3. 註冊表(UPKCL_titleidind 為 title_id PK 索引)
EXEC sp_fulltext_table 'titles', 'create', 'FT_Pubs', 'UPKCL_titleidind';
GO

-- 4. 指定索引欄位
EXEC sp_fulltext_column 'titles', 'title', 'add';
EXEC sp_fulltext_column 'titles', 'notes', 'add';
GO

-- 5. 啟用表全文索引
EXEC sp_fulltext_table 'titles', 'activate';
GO

-- 6. 完整填充
EXEC sp_fulltext_catalog 'FT_Pubs', 'start_full';
GO

-- 等待填充完成
WHILE FULLTEXTCATALOGPROPERTY('FT_Pubs', 'PopulateStatus') <> 0
    WAITFOR DELAY '00:00:30';
GO

-- 7. 全文查詢
SELECT title
FROM titles
WHERE CONTAINS(title, 'database') OR CONTAINS(title, 'computer')
   OR CONTAINS(notes, 'database') OR CONTAINS(notes, 'computer');

填充策略與效能調校

  • 完整填充:初始建立、結構變更後。耗時最長。
  • 增量填充:start_incremental,需啟用 變更追蹤 (sp_fulltext_table 'titles', 'start_change_tracking')。
  • 手動更新:start_update,批次處理變更。
  • 排程:SQL Server Agent 作業定期執行增量/更新填充。

查詢語法精要

常見問題排查

  • 全文搜尋服務未啟動:服務 MSSQLSERVER / MSFTESQL 需運行。
  • 噪音詞 過濾:noise.dat 可自訂停用詞。
  • 斷詞器:中文需安裝簡/繁體斷詞器,否則按單字元索引,精度極低。
  • 權限:需 db_owner 或 sysadmin 執行建立/填充程序。

結語

SQL Server 7.0/2000 奠定了全文檢索基礎架構:目錄→表→欄位→填充→查詢。雖然後續版本引入 CREATE FULLTEXT INDEX DDL、語意搜尋、FileTable 整合,但核心概念不變。掌握六步建立流程、填充策略與 CONTAINS/FREETEXT 查詢語法,即可在舊版系統實現高效全文搜尋。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
謂詞用途範例
CONTAINS精確/前綴/鄰近/加權查詢CONTAINS(col, '"SQL Server*"')
FREETEXT自然語言/語意查詢FREETEXT(col, 'how to optimize index')
CONTAINSTABLE傳回排名資料表 (KEY, RANK)JOIN 回主表依 RANK 排序
FREETEXTTABLE同前,語意排名同上