Microsoft SQL Server 內建的 T-SQL 支援標準 SQL 查詢,例如精確比對 WHERE Notes = 'Deliver Tuesday' 或模糊比對 WHERE Notes LIKE '%caution%'。但當你需要更進階的搜尋——例如「兩個單字彼此接近」、「同一字根衍生出的各種形式(run、ran、running)」、「多關鍵字加權搜尋」或「片語鄰近搜尋」——標準謂詞就無法滿足,這時就需要啟用 SQL Server 的全文檢索功能。
許多開發者會驚訝地發現:SQL Server 並不自行處理全文索引建立與查詢,而是倚賴 Windows 作業系統內建的 Microsoft Search Service。這項服務為包括 SQL Server 在內的多種應用程式提供索引與搜尋能力。SQL Server 2000 透過「全文檢索目錄」與「全文檢索索引」兩層結構,將文字資料交給 Search Service 建立倒排索引,查詢時再由 SQL Server 整合結果回傳。
run 可匹配 running、ran。下一版 SQL Server 2005(代號 Yukon)將大幅強化全文檢索:
CONTAINSTABLE / FREETEXTTABLE 回傳排名分數,直接套用於 ORDER BY。STOPLIST 物件,可自訂噪音字清單,取代舊版登錄機制。-- 1. 建立全文檢索目錄
CREATE FULLTEXT CATALOG ftCatalog AS DEFAULT;
-- 2. 為資料表啟用全文索引 (需有唯一索引鍵)
CREATE FULLTEXT INDEX ON dbo.Articles(Content LANGUAGE 1028)
KEY INDEX PK_Articles ON ftCatalog
WITH CHANGE_TRACKING AUTO;
-- 字幹搜尋
SELECT * FROM dbo.Articles
WHERE CONTAINS(Content, 'FORMSOF(INFLECTIONAL, run)');
-- 加權搜尋
SELECT * FROM dbo.Articles
WHERE CONTAINSTABLE(Content, 'ISABOUT(performance WEIGHT(0.8), tuning WEIGHT(0.2))') > 0;
-- 鄰近搜尋
SELECT * FROM dbo.Articles
WHERE CONTAINS(Content, 'SQL NEAR Server');
CHANGE_TRACKING AUTO 讓索引自動追蹤資料異動,或排程 FULL/INCREMENTAL 重建。sys.dm_fts_index_population 監控填入進度(SQL 2005+)。ALTER FULLTEXT CATALOG ... REORGANIZE 減少碎片。掌握全文檢索,能讓應用程式從「精確比對」邁向「語意搜尋」,大幅提升使用者體驗。立即嘗試在開發環境建立第一個全文索引,感受搜尋能力的質變!