全文索引在SQL200和SQL2005的簡單建立過程及用法

http://blog.csdn.net/feixianxxx/archive/2009/07/25/4379873.aspx

 

-------------------------

----全文索引使用小例------

分別使用SQL2000和SQL2005

------------------------

使用場合:複雜化查詢 文本數據存儲在數據列中

--環境

use poofly

go

CREATE TABLE HELLO(ID INT NOT NULL PRIMARY KEY,HELLO NVARCHAR(50))

----SP_HELPINDEX HELLO(主鍵約束即唯一索引名PK__HELLO__3214EC271DE57479)

ps:這裏的唯一約束我們最好建立在4B大小的整數列上 一般自增列是不錯的選擇,這樣可以減少文件系統的Mircosoft搜索服務的資源需求。

GO

INSERT HELLO SELECT 1,'TEST'

 

 

1、要啓用全文索引功能首先需要安裝full text search全文索引服務

 

2、啓動full text search服務

 

3、檢查數據庫全文索引是否開啓,沒有開啓則使用sp_fulltext_database 打開該功能

if(select databaseproperty('poofly','isfulltextenabled')) =0

execute sp_fulltext_database 'enable'

 

--以下是的建立全文索引小例子

4、創建全文目錄

EXEC SP_FULLTEXT_CATALOG 'POOFLY','CREATE'

 

5、註冊HELLO表,建立全文索引數據元

EXEC sp_fulltext_table 'HELLO','create','POOFLY','PK__HELLO__3214EC271DE57479'

 

6、指定支持全文索引的列名

EXEC sp_fulltext_column 'HELLO','HELLO','add'

 

7、爲表創建(激活)全文索引

--activate,是激活表的全文檢索能力,也就是在全文目錄中註冊該表

EXEC sp_fulltext_table 'HELLO','activate'

 

8、啓動對全文目錄的完全填充

--後期是使用更改跟蹤或者增量填充維護索引

--EXEC sp_fulltext_catalog 'POOFLY','strat_incremental'

EXEC sp_fulltext_catalog 'POOFLY','start_full'

 

9、驗證全文目錄填充的進度

select  fulltextcatalogproperty('POOFLY','populateStatus')

--爲表示已經完成填充

 

10、通過CONTAINS謂詞進行全文索引

select HELLO

from HELLO

where CONTAINS(*,'TEST')

/*

HELLO

---------------

TEST*/

 

11、刪除全文索引元數據

EXEC sp_fulltext_table 'HELLO','drop'

 

12、刪除全文目錄

EXEC sp_fulltext_catalog 'POOFLY','DROP'

 

--------------華麗分割線-----------------------

--以下是的建立全文索引的方法

/*創建全文目錄*/

create FULLTEXT CATALOG POOFLY AS DEFAULT

/*C創建全文索引*/

create FULLTEXT INDEX ON HELLO(HELLO) key index PK__HELLO__3214EC271DE57479 ON  POOFLY

/*通過CONTAINS謂詞進行全文索引*/

select HELLO

from HELLO

where CONTAINS(*,'TEST')

/*刪除全文索引*/

DROP FULLTEXT INDEX on HELLO

/*刪除全文目錄FT(含有全文索引時候不能刪除)*/

drop fulltext catalog POOFLY

 

 

 

-----使用contains關鍵字進行全文索引----------------

--1.前綴搜索

select name from tb where contains(name,'"china*"')

ps:注意這裏的* 返回結果可能會是 chinax chinay chinaname china

/*返回前綴是china的name--如果不用“”隔開那麼系統會都城contains(name,'china*') 與china* 匹配*/

 

--2.使用派生詞搜索

Select name from tb where contains(name,'formsof(inflectional,"foot")')

/* 出來結果可能是foot feet (所有動詞不同形態名詞單複數形式)*/

 

--3.詞加權搜索

select value from tb where contains(value , 'ISABOUT(performance weight(.8))')

/*全值用-1的一個數字表示表示每個詞的重要程度*/

 

--4.臨近詞搜素

select * from tb where contains(document,'a near b')

/* 出來的結果是“a”單詞與“b”單詞臨近的document可以寫成contains(document,'a ~ b')*/--

 

--5.布爾邏輯搜素

select * from tb where contains(name,'"a" and "b"')

/*返回既包含A 又包含B單詞的行當然這裏的AND 關鍵字還有換成OR ,AND NOT 等*/

----------------------------------------------------

 

你還可以使用RREETEXT 進行模糊搜索

--任意輸入文本全文索引自動識別重要單詞然後構造一個查詢

select * from tb where freetext(wendang,'zhubajie chi xi gua !')

--============================================================

--對全文索引性能影響因素很多包括硬件資源方面還有SQL 自身性能和MSFTESQL服務的效率等方面

--它的搜索性能有方面: 全文索引性能和全文查詢性能

 


本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/feixianxxx/archive/2009/07/25/4379873.aspx

發佈了8 篇原創文章 · 獲贊 3 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章