在全文索引中同義詞的使用(SQL SERVER 2005)
/*建立測試環境
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 '火箭即將簽下新秀射手',' 據悉,巴丁格與火箭隊的合同談判是於昨天完成的,巴丁格將得到與泰勒一樣的合同。此前媒體曝光泰勒的合同為期四年,總價值萬美元,其中前兩年為保障性合同。巴丁格預計會在接下來幾天內正式宣佈簽約加盟火箭。'
union all
select '韋弗被曝已與希臘豪門簽約','據國際籃球網報導,前火箭隊球員範-韋弗已經與希臘豪門奧林匹亞科斯隊簽訂了合同。韋弗得到一份為期兩年,總價值萬美元的合同。'
union all
select '馬刺豪擲千金為對抗湖人','馬刺隊在今夏休賽期補充了幾員大將,主教練格雷格-波波維奇日前在接受Yahoo!體育採訪時透露,馬刺隊不惜繳納奢侈稅構建豪華陣容就是為了對抗湖人隊,爭取拿到第五個總冠軍。'
union all
select '華萊士未曾想過離開汽車城','此前本-華萊士已經同意重返底特律活塞,並且以老將底薪和活塞簽下一份年萬美元的合同,而據《每日先驅報》專欄作家米克-麥格勞透露,這位當年叱吒NBA賽場的內線防守悍將甚至從來就沒有考慮過要離開活塞隊。'
union all
select '米勒竟好橫刀奪愛追求人妻','對於那些沒看過雷吉·米勒在步行者創造“米勒時間”的“後”們,應該怎麼介紹這位前NBA球星呢?難道從前天洛杉磯馬里布海灘上空那架飛機拉的橫幅說起?恐怕沒有哪位家長願意這麼做。'
union all
select '姚明:沒把上海當投資專案樂得生意做了好人當了','“姚蜜”說:不缺廣告效應的姚明收購瀕臨絕境的上海東方籃球俱樂部,說明他是真的想為曾經的母隊做點事情。'
union all
select '火箭不敵奇才終結年紀錄','此役姚麥組合狀態糟糕,姚明投中得到分個籃板次蓋帽,麥迪投中拿下分個籃板次助攻,兩人聯手竟不如得到分個籃板次助攻次蓋帽的賈米森。'
第一步:啟用資料庫的全文索引
sp_fulltext_database enable --啟用資料庫的全文索引
go
第二步:建立全文目錄
create fulltext catalog tb_fulltext
in path N'D:\Program Files\Microsoft SQL Server2005\MSSQL.1\MSSQL\FTData'
with accent_sensitivity =on --區分重音
authorization dbo;--全文目錄的所有者
第三步:建立全文索引
create fulltext index on tb
(title,detail)
key index pk_id --指定索引列,為了提高效能,最好使用聚集索引
on tb_fulltext
with change_tracking auto --在關聯的表中修改了資料時,自動更新全文索引。
第四步:查詢示例:
select * from tb
where contains((title,detail),'姚明')
查詢的語法:
1、 搜尋特定詞:contains(detail,'姚明')
2、 搜尋特定短語:用““將短語包含在雙引號內,contains(detail,'姚明 上海')
3、 從多個列中搜尋詞和短語:contains((title,detail),'姚明 上海')
4、搜尋以指定文字開頭的詞或短語:contains(detail,'“姚明*“')
如果文字和星號不包含在雙引號內,則全文搜尋會將星號看做是一個字元。如果搜尋的是短語,則該短語內的每個詞都被看做是一個字首。contains(detail,'“姚明 上海*“')則將返回第一個詞以姚明開頭第二個詞以上海開頭的結果
5、 搜尋特定詞的變形:contains(detail,'formsof(inflectional,ride)')
將返回表中含有ride,rides,riding,ridden的行
6、搜尋與另一個詞或短語臨近的詞或者短語:contains(detail,'姚明 near 上海')
7、使用加權值的詞或短語:contains(description,’isabout(performance weight(.8),comfortable weight(.4),smooth weight(.2))’)
Weight為每個詞或短語指定一個0.0~1.0之間的加權值
8、使用多個搜尋條件: contains(detail,'”姚明” or “上海”')
contains(detail,'”姚明” and “上海”')
contains(detail,'”姚明” and not “上海”')
9、在contains中還可以使用變數
10、搜尋同義詞 contains(title,'formsof(thesaurus,上)')
【測試】
在上例中,執行
select * from tb
where contains(title,'上海')
結果:
id title detail
6 姚明:沒把上海當投資專案 樂得生意做了好人當了 “姚蜜”說:不缺廣告效應的姚明收購瀕臨絕境的上海東方籃球俱樂部,說明他是真的想為曾經的母隊做點事情。
但是執行:
select * from tb
where contains(title,'上')
結果為空集。
原因:在進行全文索引查詢的時候,“上”為簡體中文的干擾詞,即查詢的時候會忽略掉;另外建立全文索引的時候一般會以一個片語作為一個索引項,而不是單個詞。
如果還要進行此查詢,想查出第一個查詢的結果,可以修改全文索引的同義詞庫。
干擾詞與同義詞檔案存在的路徑:
D:\Program Files\Microsoft SQL Server2005\MSSQL.1\MSSQL\FTData,每一個檔名應該很好辨別。
簡單介紹下修改同義詞庫的方法:
1、 使用記事本開啟tschs.xml,這是簡體中文的同義詞庫
<!-- Commented out
Internet Explorer
IE
IE5
Windows 2000
run
jog
-->
解釋:
Windows 2000
為替代詞,即查詢W2K時,會自動替換為Windows 2000進行查詢
run
jog
為同義詞庫,即查詢run的時候也會查詢jog
在本例中新增:
上
上海
2、 去掉開始於末尾的註釋行:
<!-- Commented out
-->
3、最終形成的結果為:
Internet Explorer
IE
IE5
Windows 2000
run
jog
上
上海
3、 執行查詢語句:
select * from tb
where contains(title,'formsof(thesaurus,上)')
即可看到查詢結果與contains(title,'上海')相同
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/16436858/viewspace-625206/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- SQL Server 2005中的UDF(使用者定義函式)SQLServer函式
- SQL Server CE和SQL Server 2000/2005中的ISNULL函式的異同SQLServerNull函式
- Oracle中的同義詞SYNONYMOracle
- 匯出Oracle中的同義詞Oracle
- SQL Server 2005中修改 Server Collation的方法SQLServer
- 【Oracle】-【同義詞】-public與非public同義詞Oracle
- 在SQL Server 2005中實現表的行列轉換SQLServer
- 物件、同義詞和公有同義詞順序選取物件
- 在SQL Server 2005 中使用.net程式集的一項注意SQLServer
- 【學習】SQL基礎-017-同義詞SQL
- Sql server 2005中output用法解析SQLServer
- Microsoft SQL Server 2005 中的國際功能ROSSQLServer
- sql server 2005使用點滴(1)SQLServer
- SQL Server中,WITH AS的使用SQLServer
- Sql server 2005遷移至Oracle系列之三:在Oracle中建立sql中的常見函式SQLServerOracle函式
- 在SQL Server中,關於with as使用介紹SQLServer
- SQL SERVER 2005中的同步複製技術SQLServer
- 解決SQL Server 2005中鎖的問題SQLServer
- 授權與同義詞
- ORACLE公有/私有同義詞Oracle
- 詳解同義詞(synonym)
- SQL Server 2005中的模板引數的利用方法SQLServer
- SYS查詢不到的同義詞
- Q&A:在SQL Server 2005中編寫儲存過程RVSQLServer儲存過程
- 在SQL Server 2005資料庫中實現自動備份SQLServer資料庫
- SQL server 2005 expressSQLServerExpress
- 系統中同時安裝sql2005 和 sql2008 R2 提示要刪除SQL Server 2005 ExpressSQLServerExpress
- Elasticsearch:使用同義詞 synonyms 來提高搜尋效率Elasticsearch
- SQL Server 2005+ 中的資料塊種類SQLServer
- SQL Server 2005中Service Broker應用的組成SQLServer
- SQL Server 2005中的檔案和檔案組SQLServer
- 中考常見同義詞和同義短語總結
- SQL Server 2005中的DDL觸發器的實現SQLServer觸發器
- 匯出oracle公有同義詞Oracle
- Oracle同義詞建立方法Oracle
- 多層巢狀同義詞巢狀
- Oracle同義詞 kingsql作品OracleSQL
- 官檔同義詞學習