一:簡要介紹下全文索引
可以利用索引快速通路資料庫表中的特定資訊。索引是對資料庫表中一個或多個列的值進行排序的結構。
索引提供指針以指向存儲在表中指定列的資料值,然後根據指定的排序次序排列這些指針。
資料庫使用索引的方式與使用書的目錄很相似:通過搜尋索引找到特定的值,然後跟随指針到達包含該值的行
二:全文索引的相關操作
1.确認全文索引是否開啟
對于SQL2005每個建立的資料庫全文索引特性預設是開啟的
可以通過這個語句來确認它是否開啟了
SELECT databasePropertyex('xland','isfulltextenabled')
傳回0為未開啟,傳回1為已開啟
2.激活和禁止全文索引
禁用全文索引一定要注意,已經存在的全文目錄,資料表同該目錄的任何關聯資訊都會被删除
exec sp_fulltext_database @action = 'disable'
'enable'為激活
3.建立全文索引
use xland
go
create fulltext index on dbo.mytable --在某個表上建立全文索引
(title language English) --對某個列使用全文索引
key index Pk_mytable --索引名(一般就是表名前面加Pk)
on maincatalog
with change_tracking off, --關閉跟蹤特性
no population --不進行初始化填充
其中Eglish可改為簡體中文
可通過
select name alias from master..syslanguages
查詢系統中支援的語言
修改和删除全文索引
drop fulltext index on dbo.mytable
三.全文目錄的相關操作
1.建立全文目錄
建立全文目錄的時候,全文索引一定要為enable狀态
全文目錄存放的路徑一定要有效
use xland
exec sp_fulltext_database @action = 'enable'
create fulltext catalog maincatalog
in path 'c:\fulltext'
更改和删除分别是alter和drop
drop fulltext catalog maincatalog
與其他的沒有太多差別
2.填充全文目錄
這是個背景的過程,表大的話雖然提示成功了,但是背景還在填充
alter fulltext index on dbo.mytable
start full population
或
exec sp_fulltext_table @tabname = 'dbo.mytable',
@action = 'start_full'
3.檢視結果
select title from mytable where contains(title,'全文')
四:全文查詢文法
1.contains:精确的比對
where contains(*,' "my name is" ') --對短語的精确比對,注意要有雙引号
where contains(*,' "my" or "name is" ') --或者的關系
還有'and not' 'and'
還有臨近詞和權重 我就不多說了
2.freetext:模糊比對(你輸入swim可以比對出swam)與contains文法相同
3.containstable
此函數傳回一個表
此表包含兩個列
一個是key(就是主健啦) 一個是rank(傳回的行與搜尋結果的比對程度,越大越精确)
select title from mytable p
join containstable(mytable, title , 'xland') ct
on p.id = ct.[key]
4.freetexttable與containstable類似
附件:使用舊式文法建立全文索引的例子
--檢查資料庫pubs是否支援全文索引,如果不支援
--則使用sp_fulltext_database 打開該功能
if(select databaseproperty('xland','isfulltextenabled'))=0
execute sp_fulltext_database 'enable'
--建立全文目錄FT_xland
execute sp_fulltext_catalog 'FT_xland','create'
--為mytable表建立全文索引資料元
execute sp_fulltext_table 'mytable','create','FT_xland','PK_mytable'--最後一個是主鍵名
--設定全文索引列名
execute sp_fulltext_column 'mytable','title','add'
--建立全文索引
--activate,是激活表的全文檢索能力,也就是在全文目錄中注冊該表
execute sp_fulltext_table 'mytable','activate'
--填充全文索引目錄
execute sp_fulltext_catalog 'FT_xland','start_full'
go
--檢查全文目錄填充情況
While fulltextcatalogproperty('FT_xland','populateStatus')<>0
begin
--如果全文目錄正處于填充狀态,則等待30秒後再檢測一次
waitfor delay '0:0:30'
end
--全文目錄填充完成後,即可使用全文目錄檢索
select * from mytable where CONTAINS(title,'xland')