全文檢索可以對varchar,text,image型字段進行檢索,但一個表最多只能建一個全文索引
SQL Server 2000 引入了對存儲在 image 列中的這些類型的數據執行全文檢索的能力。
如果沒有全文索引,對字符的模糊查詢只能對基表進行全表掃描(或索引掃描),
執行模糊查詢都需要對全表掃描或索引掃描意味著消耗大量IO。
如果模糊查詢經常發生,會造成數據庫性能惡化。
本篇為簡單起見,僅在varchar型字段上圖文演示非常完整的而且是高效可行的全文索引
創建及維護過程.
1:
在企業管理器中展開要建立全文索引的數據庫,右擊“全文目錄”,選擇“新建全文目錄”
如 圖1 所示。
可以修改全文目錄的路徑,通過將全文目錄放在單獨的磁盤或磁盤陣列可以提高效率。
建議不要對整個全文目錄進行任何形式的填充調度。
=================== 圖1 ===================
2:
接下來對具體的表添加全文索引。
全文索引不能建立在視圖上,只能建立在有唯一索引(主鍵也是唯一索引)的基礎表上。
下圖2 演示如何對表建立全文索引。
演示中的 t_fulltext 表的建表及初始化數據的腳本如下:
create table t_fulltext
(
rid int identity(1,1),
title varchar(256) not null,
writetime datetime default(getdate())
)
go
alter table t_fulltext add constraint pk_fulltext primary key ( rid )
go
--初始化數據
insert into t_fulltext(title) values('山東蓬萊河西金礦透水事故2人死亡3人失蹤(21:29)')
insert into t_fulltext(title) values('泰國將在廣西南寧設立總領事館(21:10)')
insert into t_fulltext(title) values('河北安徽等12省減免農業稅等政策落實到位(20:43)')
insert into t_fulltext(title) values('台灣學者托夢預測陳水扁元旦講話(20:04)')
insert into t_fulltext(title) values('澳門特首何厚铧發表元旦獻辭向市民問候新年(20:02)')
insert into t_fulltext(title) values('南水北調首個建成項目山東段濟平干渠通水成功(19:48)')
insert into t_fulltext(title) values('組圖:北京110摩托車巡警亮相(18:07)')
insert into t_fulltext(title) values('福建廣西發生患者死亡事件 醫院責任人被處理(17:33)')
insert into t_fulltext(title) values('北京大容量公交車運營首日遭遇乘客爆滿(17:30)')
insert into t_fulltext(title) values('北京公安系統今天全部停休嚴查五環內放炮(17:30)')
insert into t_fulltext(title) values('研究發現海龍基因酶對禽流感病毒有殺傷作用(17:27)')
insert into t_fulltext(title) values('上海世博會籌辦進入實質性操作面臨五大挑戰(17:03)')
insert into t_fulltext(title) values('台媒體稱陳水扁元旦祝詞必將老調重彈(15:30)')
insert into t_fulltext(title) values('珠三角鹹潮影響范圍小於去年(15:12)')
insert into t_fulltext(title) values('上海市民體驗軌道交通4號線列車(組圖)(14:53)')
insert into t_fulltext(title) values('廣州億元集資詐騙案主犯王日升被判死緩(圖)(14:44)')
insert into t_fulltext(title) values(' 評論:取消農業稅讓民眾共享經濟增長成果(17:30)')
insert into t_fulltext(title) values('香港媒體談美國應對中國新策略:合作與防范(15:57)')
insert into t_fulltext(title) values('專訪中國地震局局長陳建民:地震是能夠預測的(15:56)')
insert into t_fulltext(title) values('評論:野蠻公交莫成城市丑陋形象代言人(13:27)')
insert into t_fulltext(title) values('台媒體稱當局與民間企業對立非民眾之福(12:50)')
=================== 圖2 ===================
3:出現的歡迎界面如 圖3
=================== 圖3 ===================
4:為全文索引選擇唯一索引,如 圖4
=================== 圖4 ===================
5:選擇全文索引的列,注意一張表只能建一個全文索引。建
議不要選擇斷詞的語言,這樣實際會使用默認的斷詞語言。如圖5 所示。
通過運行
sp_configure 'default full-text language'
可以查看默認的斷詞語言,如我的機器上運行上條語句,config_value 值是 2052
它表示簡體中文。
其它代碼所表示的語言可以查閱Book Online的“default full-text language”關鍵詞。
由於SQL Server對中文斷詞並不是很高明,因此並不能依靠SQL Server帶給您非常智能的搜索,這意味著您的全文搜索結果,可能有不希望出現的記錄,或您希望出現的記錄沒有出現。
=================== 圖5 ===================
6:將表指派到全文目錄,如 圖6 所示,也可以通過此界面創建新目錄。
=================== 圖6 ===================
7:接下來會提示對表進行填充調度,為能夠准實時地把基表的全文索引列的修改(增、刪、改)准實時地應用到全文索引,建議使用下面介紹的其它方法進行索引維護。如 圖7 所示,建議不要在這裡添加任何調度,直接點擊“下一步”。
如果數據不會再修改,則在一次完全填充以後,不用再增加其它類型的表級填充。
如果實施到本步驟,不再添加任何形式的表調度,那麼基表數據的更新,將不能更新到全文索引。
=================== 圖7 ===================
8:如 圖8 所示出現的完成界面提示中點擊“完成 ”,請稍微等待直到出現下一界面。
=================== 圖8 ===================
9:在如 圖9 所示的界面中點擊“確定”。
由於尚未在表上添加任何調度,因此還需要繼續設置。
=================== 圖9 ===================
10:在企業管理器中右擊 f_fulltext 表,如 圖10 所示,選中“更改跟蹤”。
選中更改跟蹤後,以後對基表數據的修改,才能反映到全文索引中。
特別注意:一旦選中“更改跟蹤”,根據經驗,其實是必須對該表進行完全填充的。
如果是在線使用的全文索引數據庫,選中“更改跟蹤”會導致性能迅速下降,導致全文索引
無法使用。
=================== 圖10 ===================
11: 在企業管理器中右擊 f_fulltext 表,如 圖11 所示,選中“更新後台中的索引”。
到本步,全文索引就完全完成了。由於我們選中了“更改跟蹤”,此時實際已經開始了表的完全填充。
根據經驗,300萬條全文索引字段長為 50 的表,需要8到10小時才能完成完全填充。
=================== 圖11 ===================
12:可以通過雙擊全文目錄下的全文索引,查看該全文目錄的屬性,如 圖12 所示,狀態為“空閒”,而項目計數大於0,則表示完全填充已經完成了。
=================== 圖12 ===================
13:如何進行全文索引查詢(僅簡單介紹)
全文索引查詢建議使用 CONTAINS 及 FREETEXT 謂詞進行查詢。
如果關鍵詞僅包括干擾詞(有關干擾詞的信息,請參閱Book Online的“干擾詞”關鍵字)
select * from t_fulltext where contains(title,'3')
則會報如下錯誤
服務器: 消息 7619,級別 16,狀態 1,行 1
全文操作運行失敗。查詢子句只包含被忽略的詞。
使用下面的語法,能避免出現錯誤,且能夠確實查詢出正確的記錄。
select * from t_fulltext where contains(title,'"*3*"')
13 台媒體稱陳水扁元旦祝詞必將老調重彈(15:30) 2005-12-31 23:17:17.670
10 北京公安系統今天全部停休嚴查五環內放炮(17:30) 2005-12-31 23:17:17.653
17 評論:取消農業稅讓民眾共享經濟增長成果(17:30) 2005-12-31 23:17:17.670
9 北京大容量公交車運營首日遭遇乘客爆滿(17:30) 2005-12-31 23:17:17.653
8 福建廣西發生患者死亡事件 醫院責任人被處理(17:33) 2005-12-31 23:17:17.653
(所影響的行數為 5 行)
全文索引的簡單介紹就到這裡了,希望能起個拋磚引玉的作用。