填充全文索引實質上就是更新全文索引,其目的是讓全文索引可能夠反映最新的數據表內容。
填充全文索引一共有三種方式:
l 完全填充:完全填充方式通常發生在首次填充全文目錄或全文索引時,在前一節中所說到的“啟用全文索引”時,就已經對全文索引進行了一次完全填充,以後就可以使用基於更改跟蹤的填充和基於增量時間戳的填充來維護全文索引。
l 基於更改跟蹤方式的填充:SQL Server會記錄設置了全文索引的數據表中修改的行,這些記錄存儲在日志中,在某個適當時機時將這些更改填入到全文索引中。
l 基於增量時間戳方式的填充:也就是增量填充,在全文索引中更新上次填充之後更新的行。增量填充要求索引表中必須有timestamp數據類型的字段,如果沒有該類型的字段,則無法執行增量填充,系統將會以完全填充的方式來取代增量填充方式進行填充。
由於填充全文索引有三種不同的方式,所以填充全文索引的方法也不相同。如果要以完全填充或增量填充方式來填充全文索引,則只要右擊全文索引所在的數據表,在彈出的快捷菜單裡選擇【全文索引】à【啟動完全填充】或【啟動增量填充】選項即可。如圖14.14所示。
圖14.14 填充全文索引
更改跟蹤方式填充全文索引分為手動和自動兩種方法,在默認情況下是自動填充,如果要更改為手動方式,可以右擊全文索引所在的數據表,在彈出的快捷菜單裡選擇【全文索引】à【手動跟蹤更改】選項,如圖14.14所示。
選擇完畢之後,SQL Server會自動跟蹤數據表中的數據更改情況,但並不將其更新到全文索引中,只有在需要將這些更新反應到全文索引上時,右擊全文索引所在的數據表,在彈出的快捷菜單裡選擇【全文索引】à【應用跟蹤的更改】選項後,才會將更新反應到全文索引上。
如果在圖14.14所示界面裡選擇了【自動跟蹤更改】選項,則由SQL Server自動將記錄的數據表的更改更新到全文索引中,不再需要人工進行填充。
如果在數據庫中有多個數據表創建了全文索引,可以使用重新生成索引目錄的方法將所有的全文索引進行完全填充,其方法如下:
(1)在【對象資源管理器】窗口裡展開樹形目錄,定位到【服務器】à【數據庫】à【Northwind】à【存儲】à【全文目錄】。
(2)右擊【全文目錄】,在彈出的快捷菜單中選擇【全部重新生成】選項。
(3)在彈出的【重新生成所有全文目錄】對話框裡單擊【確定】按鈕完成操作。
14.6.3 定時填充全文索引
在SQL Server 2005中,可以為填充全文索引設置計劃,讓系統自動定時填充全文索引,其方法如下:
(1)右擊全文索引所在的數據表,在彈出的快捷菜單裡選擇【全文索引】à【屬性】來查看全文索引的設置,如圖14.12所示,在該圖中選擇【計劃】選項。
(2)彈出如圖14.15所示全文索引填充計劃對話框,在該對話框中單擊【新建】按鈕。
圖14.15 全文索引填充計劃對話框
(3)彈出如圖14.16所示的【新建全文索引表計劃】對話框。
l 在【名稱】文本框裡可以輸入該計劃名稱。
l 在【計劃類型】下拉列表框裡,可選項有“SQL Server代理啟動時自動啟動”:也就是在SQLServer代理啟動時自動填充全文索引;“CPU空閒時啟動”:也就是當CPU空閒時填充全文索引;“執行一次”:在指定時間時填充全文索引,只填充一次;“重復執行”:可以設定多次填充全文索引的方式。
l 如果選中【已啟用】復選框,則啟用該填充全文索引的計劃。
l 在【執行一次】區域裡,可以設置計劃類型為“執行一次”的執行時間,在到達該時間時,自動填充全文索引。
l 在【頻率】區域裡,可以設置計劃類型為“重復執行”的執行頻率。在【執行】下拉列表框裡可選擇項為“每天”、“每周”和“每月”,分別用於指定每天、每周和每月執行填充計劃的頻率。
l 在【持續時間】區域裡可以設置該計劃的開始日期與結束日期,其中結束日期可以設置為無結束日期,也就是永遠執行下去。
圖14.16 【新建全文索引表計劃】對話框
(4)設置完畢後單擊【確定】按鈕完成計劃設計,返回如圖14.17所示對話框。
圖14.17 全文索引填充計劃對話框
(5)在如圖14.17所示對話框裡,可以選擇全文索引填充計劃所要執行的填充方式,設置完畢後單擊【確定】按鈕完成操作。
注意:如果單擊【確定】按鈕之後出現如圖14.18所示的失敗對話框,請先安裝SQL Server 2005SP1(下載地址為:http://www.microsoft.com/downloads/details.ASPx displaylang=zh-cn&
FamilyID=cb6c71ea-d649-47ff-9176-e7cac58fd4bc),然後再安裝版本為9.0.2153的SQL Server2005累積修補程序包(下載地址為:http://support.microsoft.com/kb/918222/zh-cn)。
圖14.18 添加計劃失敗對話框
使用類似的方法也可以定時填充全文目錄:
(1)右擊全文目錄名,在彈出的快捷菜單裡選擇【屬性】選項。
(2)在彈出的如圖14.4所示的【全文目錄屬性】對話框裡選擇【填充計劃】選項。
(3)彈出與14-15所示的填充計劃對話框,其添加計劃的步驟與創建全文索引的填充計劃幾乎相同,在此就不再贅述了。
-----------------------------------------------------------------
http://topic.csdn.Net/u/20091010/00/5e59f87b-fa23-46ed-9551-dcc9240e169f.Html
難題困擾:
1,有100萬記錄的表main_source(ms_id,標准地址)
2,已啟用了sql 全文搜索功能,在標准地址上建立了全文索引。
3,我想檢索地址中含有4的地址(例如:****4路13號,*****路4棟4樓),以下任何其中一條語句竟然返回空集合,(事實上存在幾萬條這樣的記錄)。
select 標准地址 from main_source where contains(標准地址,"4")
select 標准地址 from main_source where contains(標准地址,""4"")
select 標准地址 from main_source where contains(標准地址,""4*"")
4,但如果執行以下語句,有數據返回
select 標准地址 from main_source where contains(標准地址,"40")
答案:
噪音問題,SQL Server過濾了一些他認為無用的字符。。
你直接把下面這個文件裡在的0-9的內容刪除就行了。
C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\FTData\noiseCHS.txt
-------------------------------------------------------------------
http://blog.csdn.Net/fredrickhu/archive/2009/09/20/4574214.ASPx
-------------開啟全文索引和創建全文索引目錄
exec sp_fulltext_database "enable"
--exec sp_fulltext_catalog "gf_ft","drop"
exec sp_fulltext_catalog "gf_ft","create"
-------------為news表創建全文索引 可索引列為 title,abstract,text
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
begin
--如果全文目錄正處於填充狀態,則等待5秒後再檢測一次
waitfor delay "0:0:5"
END
exec sp_fulltext_catalog "gf_ft","start_full"
--檢查全文目錄填充情況
While fulltextcatalogproperty("gf_ft","populateStatus")<>0
begin
--如果全文目錄正處於填充狀態,則等待5秒後再檢測一次
waitfor delay "0:0:5"
END
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"
先了解一下全文索引是如何創建和使用的
創建全文索引:
在MS SQL Server 2005裡,全文索引是一個單獨的服務項,默認是啟動的,但是沒有允許數據庫啟用全文索引,如果要在某個數據庫中創建全文索引,先要啟用數據庫的全文索引. 1.數據庫->屬性->常規->啟用全文索引
2.在查詢中執行:sp_.........忘了,如果沒有啟用就執行創建索引目錄,會提示.
啟用了索引了,就可以創建索引目錄了 CREATE FULLTEXT CATALOG 索引目錄名
執行以後,就會在SQL Server的安裝目錄裡看到一個同名的目錄名了,路徑為MSSQL.1/MSSQL/FTDATA/索引目錄名
每個表只可以有一個全文索引,存放在指定的索引目錄裡,可以通過向導創建,也可以通過SQL創建 CREATE FULLTEXT INDEX ON tablename
(索引列1,索引列2...)
KEY INDEX indexname ON 索引目錄名
indexname是指已存在的基於指定表的唯一索引名.而不是唯一索引列名.如果索引不存在,需要先創建唯一索引.
使用全文索引:
主要使用CONTAINS,FREETEXT進行查詢
假設已有一個表music,已為字段memo創建全文索引,那麼要查詢含有周傑倫或者jay的所有記錄的語句為:
SELECT * FROM music WHERE CONTAINS(memo,""周傑倫" or "jay"")
也可以使用匹配模式進行包含條件組合,還可以使用and連接條件.