啟用全文檢索功能
-- 檢查資料庫是否已啟用全文檢索 (1=已啟用)
SELECT DATABASEPROPERTY('資料庫名', 'IsFulltextEnabled')
-- 啟用/停用全文檢索
EXEC sp_fulltext_database 'enable'
EXEC sp_fulltext_database 'disable'
建立全文目錄與索引
-- 建立全文目錄
CREATE FULLTEXT CATALOG 目錄名
-- 刪除目錄:DROP FULLTEXT CATALOG 目錄名
-- 建立全文索引(前提:表需有唯一索引)
CREATE FULLTEXT INDEX ON 表名 (欄位1, 欄位2, ...)
KEY INDEX 唯一索引名 ON 目錄名
-- 刪除索引:DROP FULLTEXT INDEX ON 表名
全文查詢語法
CONTAINS:精確/前綴/近義詞搜尋
SELECT * FROM 表名
WHERE CONTAINS(欄位名, '"202*" OR "2*"')
- 支援布林運算子:AND, OR, AND NOT
- 支援前綴:* 代表任意字元
- 支援近似搜尋:
FORMSOF(FREETEXT, '關鍵字')
FREETEXT:自然語言搜尋
SELECT * FROM 表名
WHERE FREETEXT(欄位名, '"202*" AND "2*"')
- 自動進行斷詞、詞幹分析、同義詞展開
- 適合使用者自由輸入的搜尋框
- 不支援布林邏輯,將整個字串視為語意查詢
CONTAINS vs FREETEXT 差異比較
| 特性 | CONTAINS | FREETEXT |
| 查詢模式 | 精確/結構化 | 自然語言/模糊 |
| 布林邏輯 | 支援 | 不支援 |
| 前綴搜尋 | 支援 (*) | 不支援 |
| 近義詞/詞幹 | 需明確指定 FORMSOF | 自動展開 |
| 適用場景 | 後台管理、精確篩選 | 前台使用者搜尋框 |
維護與效能
- 全文索引為非同步填滿,可設定
CHANGE_TRACKING AUTO 自動追蹤變更。
- 定期執行
ALTER FULLTEXT INDEX ON 表名 REORGANIZE 整理碎片。
- 監控
sys.dm_fts_index_population 觀察填滿狀態。