/*建立測試環(huán)境
WINXP(SP3)+SQL SERVER2005(SP3)*/
if object_id('tb') is not null
drop table tb
go
create table tb
(id int identity(1,1),
title varchar(200),
detail varchar(1000),
constraint pk_id PRimary key(id) –在建立全文索引時需要使用
)
insert into tb
select '火箭即將簽下新秀射手',' 據(jù)悉,巴丁格與火箭隊的合同談判是于昨天完成的,巴丁格將得到與泰勒一樣的合同。此前媒體曝光泰勒的合同為期四年,總價值萬美元,其中前兩年為保障性合同。巴丁格預計會在接下來幾天內(nèi)正式宣布簽約加盟火箭。'
union all
select '韋弗被曝已與希臘豪門簽約','據(jù)國際籃球網(wǎng)報道,前火箭隊球員范-韋弗已經(jīng)與希臘豪門奧林匹亞科斯隊簽訂了合同。韋弗得到一份為期兩年,總價值萬美元的合同。'
union all
select '馬刺豪擲千金為對抗湖人','馬刺隊在今夏休賽期補充了幾員大將,主教練格雷格-波波維奇日前在接受Yahoo!體育采訪時透露,馬刺隊不惜繳納奢侈稅構(gòu)建豪華陣容就是為了對抗湖人隊,爭取拿到第五個總冠軍。'
union all
select '華萊士未曾想過離開汽車城','此前本-華萊士已經(jīng)同意重返底特律活塞,并且以老將底薪和活塞簽下一份年萬美元的合同,而據(jù)《每日先驅(qū)報》專欄作家米克-麥格勞透露,這位當年叱咤NBA賽場的內(nèi)線防守悍將甚至從來就沒有考慮過要離開活塞隊。'
union all
select '米勒竟好橫刀奪愛追求人妻','對于那些沒看過雷吉·米勒在步行者創(chuàng)造“米勒時間”的“后”們,應(yīng)該怎么介紹這位前NBA球星呢?難道從前天洛杉磯馬里布海灘上空那架飛機拉的橫幅說起?恐怕沒有哪位家長愿意這么做。'
union all
select '姚明:沒把上海當投資項目樂得生意做了好人當了','“姚蜜”說:不缺廣告效應(yīng)的姚明收購瀕臨絕境的上海東方籃球俱樂部,說明他是真的想為曾經(jīng)的母隊做點事情。'
union all
select '火箭不敵奇才終結(jié)年紀錄','此役姚麥組合狀態(tài)糟糕,姚明投中得到分個籃板次蓋帽,麥迪投中拿下分個籃板次助攻,兩人聯(lián)手竟不如得到分個籃板次助攻次蓋帽的賈米森。'
第一步:啟用數(shù)據(jù)庫的全文索引
sp_fulltext_database enable --啟用數(shù)據(jù)庫的全文索引
go
第二步:建立全文目錄
create fulltext catalog tb_fulltext
in path N'D:/Program Files/Microsoft SQL Server2005/MSSQL.1/MSSQL/FTData'
with accent_sensitivity =on --區(qū)分重音
authorization dbo;--全文目錄的所有者
第三步:建立全文索引
create fulltext index on tb
(title,detail)
key index pk_id --指定索引列,為了提高性能,最好使用聚集索引
on tb_fulltext
with change_tracking auto --在關(guān)聯(lián)的表中修改了數(shù)據(jù)時,自動更新全文索引。
第四步:查詢示例:
select * from tb
where contains((title,detail),'姚明')
查詢的語法:
1、 搜索特定詞:contains(detail,'姚明')
2、 搜索特定短語:用““將短語包含在雙引號內(nèi),contains(detail,'姚明 上海')
3、 從多個列中搜索詞和短語:contains((title,detail),'姚明 上海')
4、搜索以指定文本開頭的詞或短語:contains(detail,'“姚明*“')
如果文本和星號不包含在雙引號內(nèi),則全文搜索會將星號看做是一個字符。如果搜索的是短語,則該短語內(nèi)的每個詞都被看做是一個前綴。contains(detail,'“姚明 上海*“')則將返回第一個詞以姚明開頭第二個詞以上海開頭的結(jié)果
5、 搜索特定詞的變形:contains(detail,'formsof(inflectional,ride)')
將返回表中含有ride,rides,riding,ridden的行
6、搜索與另一個詞或短語臨近的詞或者短語:contains(detail,'姚明 near 上海')
7、使用加權(quán)值的詞或短語:contains(description,’isabout(performance weight(.8),comfortable weight(.4),smooth weight(.2))’)
Weight為每個詞或短語指定一個0.0~1.0之間的加權(quán)值
8、使用多個搜索條件: contains(detail,'”姚明” or “上?!?)
contains(detail,'”姚明” and “上海”')
contains(detail,'”姚明” and not “上海”')
9、在contains中還可以使用變量
10、搜索同義詞 contains(title,'formsof(thesaurus,上)')
【測試】
在上例中,執(zhí)行
select * from tb
where contains(title,'上海')
結(jié)果:
id title detail
6 姚明:沒把上海當投資項目 樂得生意做了好人當了 “姚蜜”說:不缺廣告效應(yīng)的姚明收購瀕臨絕境的上海東方籃球俱樂部,說明他是真的想為曾經(jīng)的母隊做點事情。
但是執(zhí)行:
select * from tb
where contains(title,'上')
結(jié)果為空集。
原因:在進行全文索引查詢的時候,“上”為簡體中文的干擾詞,即查詢的時候會忽略掉;另外建立全文索引的時候一般會以一個詞組作為一個索引項,而不是單個詞。
如果還要進行此查詢,想查出第一個查詢的結(jié)果,可以修改全文索引的同義詞庫。
干擾詞與同義詞文件存在的路徑:
D:/Program Files/Microsoft SQL Server2005/MSSQL.1/MSSQL/FTData,每一個文件名應(yīng)該很好辨別。
簡單介紹下修改同義詞庫的方法:
1、 使用記事本打開tschs.xml,這是簡體中文的同義詞庫
<XML ID="Microsoft Search Thesaurus">
<!-- Commented out
<thesaurus xmlns="x-schema:tsSchema.xml">
<diacritics_sensitive>0</diacritics_sensitive>
<expansion>
<sub>Internet Explorer</sub>
<sub>IE</sub>
<sub>IE5</sub>
</expansion>
<replacement>
<pat>NT5</pat>
<pat>W2K</pat>
<sub>Windows 2000</sub>
</replacement>
<expansion>
<sub>run</sub>
<sub>jog</sub>
</expansion>
</thesaurus>
-->
</XML>
解釋:
<replacement>
<pat>NT5</pat>
<pat>W2K</pat>
<sub>Windows 2000</sub>
</replacement>
為替代詞,即查詢W2K時,會自動替換為Windows 2000進行查詢
<expansion>
<sub>run</sub>
<sub>jog</sub>
</expansion>
為同義詞庫,即查詢run的時候也會查詢jog
在本例中添加:
<expansion>
<sub>上</sub>
<sub>上海</sub>
</expansion>
2、 去掉開始于末尾的注釋行:
<!-- Commented out
-->
3、最終形成的結(jié)果為:
<XML ID="Microsoft Search Thesaurus">
<thesaurus xmlns="x-schema:tsSchema.xml">
<diacritics_sensitive>0</diacritics_sensitive>
<expansion>
<sub>Internet Explorer</sub>
<sub>IE</sub>
<sub>IE5</sub>
</expansion>
<replacement>
<pat>NT5</pat>
<pat>W2K</pat>
<sub>Windows 2000</sub>
</replacement>
<expansion>
<sub>run</sub>
<sub>jog</sub>
</expansion>
<expansion>
<sub>上</sub>
<sub>上海</sub>
</expansion>
</thesaurus>
</XML>
3、 執(zhí)行查詢語句:
select * from tb
where contains(title,'formsof(thesaurus,上)')
即可看到查詢結(jié)果與contains(title,'上海')相同
2 0 0
(請您對文章做出評價)