| 模式 | 觸發方式 | 適用場景 | 前置條件 |
|---|---|---|---|
| 完全填充 | 手動/計劃/首次啟用 | 初建索引、大量數據重構後 | 無 |
| 更改跟蹤(自動/手動) | 自動:後台持續;手動:需執行「應用跟蹤的更改」 | 頻繁增刪改、實時性要求高 | 無 |
| 增量填充 | 手動/計劃 | 大表、僅需增量更新、可接受延遲 | 表必須有 timestamp 列 |
報錯「添加計劃失敗」:需先安裝 SP1 再裝 累積更新 9.0.2153(KB918222)。
現象:CONTAINS(標准地址, '4') 空集,CONTAINS(..., '40') 有數萬條。
根因:全文引擎將單個數字 0-9 視為噪音詞自動過濾。
解決:編輯噪音詞文件,刪除 0-9 相關行:
C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\FTData\noiseCHS.txt
(中文環境;英文對應 noiseENG.txt)
修改後需重新完全填充該全文索引生效。
-- 啟用數據庫全文
EXEC sp_fulltext_database 'enable';
-- 創建/刪除目錄
EXEC sp_fulltext_catalog 'gf_ft', 'create';
EXEC sp_fulltext_catalog 'gf_ft', 'drop';
-- 表級:創建/激活/填充
EXEC sp_fulltext_table 'product', 'create', 'gf_ft', 'pk_product';
EXEC sp_fulltext_column 'product', 'productname', 'add';
EXEC sp_fulltext_table 'product', 'activate';
EXEC sp_fulltext_table 'product', 'start_full';
-- 等待填充完成
WHILE FULLTEXTCATALOGPROPERTY('gf_ft', 'populateStatus') <> 0
WAITFOR DELAY '0:0:5';
-- 查詢
SELECT * FROM product WHERE CONTAINS(productname, '"美贊臣"');
-- 卸載
EXEC sp_fulltext_table 'product', 'deactivate';
EXEC sp_fulltext_column 'product', 'productname', 'drop';
EXEC sp_fulltext_table 'product', 'drop';
EXEC sp_fulltext_catalog 'gf_ft', 'stop';
EXEC sp_fulltext_catalog 'gf_ft', 'drop';
-- 創建目錄
CREATE FULLTEXT CATALOG ft_catalog;
-- 創建索引(需唯一索引作 KEY INDEX)
CREATE FULLTEXT INDEX ON product(productname)
KEY INDEX pk_product ON ft_catalog;
-- 查詢
SELECT * FROM product WHERE CONTAINS(productname, '周傑倫 OR jay');
SELECT * FROM product WHERE FREETEXT(productname, '數碼攝像機');