Title:Sql2005全文索引(五)-->Author:wufeng4552-->Date:2009-10-15實戰(zhàn)篇(續(xù))(7)使用全文搜索查詢設置完全文索引并填充完畢之后,就可以通過全文搜索來查詢數(shù)據(jù)了。使用全文搜索來查詢數(shù)據(jù)所用到的T-SQL語句也是SELECT語句,只是在設置查詢條件時和前面所說過的SELECT語句的查詢條件設置有些不同。在T-SQL語言中,可以在SELECT語句的WHERE子句里設置全文搜索的查詢條件,也可以在FROM子" />

亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

Sql2005 全文索引(五)

系統(tǒng) 1826 0

--> Title : Sql2005 全文索引(五)

--> Author : wufeng4552

--> Date : 2009-10-15

實戰(zhàn)篇(續(xù))

(7)使用全文搜索查詢

設置完全文索引并填充完畢之后,就可以通過全文搜索來查詢數(shù)據(jù)了。使用全文搜索來查詢數(shù)據(jù)所用到的 T-SQL 語句也是 SELECT 語句,只是在設置查詢條件時和前面所說過的 SELECT 語句的查詢條件設置有些不同。在 T-SQL 語言中,可以在 SELECT 語句的 WHERE 子句里設置全文搜索的查詢條件,也可以在 FROM 子句里設置查詢條件,此時將返回結(jié)果作為 FROM 子句中的表格來使用。

如果要在 WHERE 子句里設置全文搜索的查詢條件,可以使用 CONTAINS FREETEXT 兩個謂詞;如果要在 FROM 子句里設置全文搜索的查詢條件 ,可以使用 CONTAINSTABLE FREETEXTTABLE 兩個行集值函數(shù).

(7.1) 使用 CONTAINS 搜索

CONTAINS 用于 SELECT 語句的 WHERE 子句中,可以支持使用復雜的語法在字符列中搜索詞、子句、衍生字或位置相近的字符串。使用 CONTAINS 謂詞可以在數(shù)據(jù)表中使用以下五種形式搜索數(shù)據(jù):

簡單詞:也就是可以搜索一個或多個特定的詞或短語。詞可以包括一個或多個字符,中間沒有空格或標點。短語可以是由空格分隔的多個詞組成,但詞之間可以有標點也可以沒標點。

派生詞:也就是可以搜索特定詞的變形,一般是指英語中的單詞,其有過去式、現(xiàn)在式、將來式等不同的形式。派生詞是指可以包含該單詞的所有其他形式。

前綴詞:也就是可以搜索指定文本開頭的詞或短語。一般也用于英文單詞中,可以指定一個英文單詞的前幾個字母來作為搜索條件。

加權詞:也就是可以給多個搜索條件加上權值,加權值越高的記錄排在越前面。

鄰近詞:也就是可以搜索與另一個詞或短語相鄰近的詞或短語。

下面分別介紹如何使用這些不同的方式來搜索數(shù)據(jù)

CONTAINS 具體語法請參考聯(lián)機幫助!

(7.1.1) 簡單詞的搜索方式

簡單詞的搜索方式就是搜索一個或多個特定的詞或短語。

例一、搜索文章表的標題中含有 上海 的記錄,其代碼如下:

SELECT * FROM 文章 WHERE CONTAINS( 標題 ,' 上海 ')

例二、搜索文章表的內(nèi)容中含有 上海 廣州 的記錄,其代碼如下:

SELECT * FROM 文章 WHERE CONTAINS( 內(nèi)容 ,' " 上海 " OR " 廣州 "')

注意例二與例一的不同,在 CONTAINS 謂詞的第二個參數(shù)里,將 “” 上海 ” OR “ 廣州 ”” 做為一個字符串傳遞 CONTAINS 。使用以下代碼將會出錯: SELECT * FROM 文章 WHERE CONTAINS( 內(nèi)容 ,' 上海 ‘ OR ’ 廣州 ')

(7.1.2) 派生詞的搜索方式

派生詞的搜索方式主要用在英文當中,因為英文單詞中含有現(xiàn)在式、過去式、將來式、單復數(shù)等不同的形式,使派生詞的搜索方式可以將字段中包括該單詞的所有形式的記錄都搜索出來。例如使用派生詞方式搜索包含單詞 download 的記錄,則會把包含 download downloading 等派生詞的記錄都搜索出來。

例三、搜索文章表中內(nèi)容中含有 download 及其派生詞的記錄,其代碼如下:

SELECT * FROM 文章 WHERE CONTAINS( 內(nèi)容 ,'FORMSOF(INFLECTIONAL,download)')

注意 CONTAINS 謂詞的不同處,運行結(jié)果如圖7.1 所示

7.1運行結(jié)果 7.1運行結(jié)果

在圖7.1 中可以看到只查詢到一條記錄,而并未將 download 的派生詞也搜索進來,這是因為從一開始設置全文索引時,所采用的是數(shù)據(jù)庫默認的斷字符語言,即簡體中文,而在中文中沒有派生詞,所以使用派生詞方式搜索數(shù)據(jù)是起不到其作用的。此時可以通過修改全文索引的斷字符語言來達到搜索效果。修改方式如下:

1 )右擊全文索引所在的數(shù)據(jù)表,在彈出的快捷菜單中選擇【全文索引】-- 【屬性】-- 【全文索引屬性】對話框。

2 )在【全文索引屬性】對話框里選擇【列】選項,彈出如圖7.2 所示對話框,修改【內(nèi)容】字段的【斷字符語言】為 “English”

7.2 修改斷字符語言 7.2 修改斷字符語言

3 )單擊【確定】按鈕完成操作。

再次運行例三中的代碼,其運行結(jié)果如圖 7.3 所示。

7.3正確的運行結(jié)果 7.3正確的運行結(jié)果

(7.1.3) 前綴詞的搜索方式

前綴詞的搜索方式主要也是用在搜索英文中,例如搜索以 “do” 開頭的單詞,則可以將 doctor document download 等單詞都搜索出來。

例四、搜索文章表中內(nèi)容中含有 “do” 開頭的單詞的記錄,其代碼如下:

SELECT * FROM 文章 WHERE CONTAINS( 內(nèi)容 ,' "do*" ')

此方式有點類似與 like 子句的通配符方式,但只能使用 “*” ,并且只能放在英文字母之后,如 “*do” “*do*” 都是錯誤的表達方式。

(7.1.4) 加權詞的搜索方式

當以多個字符串作為搜索條件搜索記錄時,可以為不同的字符串加上一個加權值,這個加權值是介于 0 1 之間的數(shù)值,加權值越高的記錄排在越前面

例五、搜索文章表中內(nèi)容中含有 “download" 上海 山西 的記錄,并為不同的條件加上加權值,其代碼如下:

SELECT * FROM 文章 WHERE CONTAINS( 內(nèi)容 , 'ISABOUT ("download" weight(0.9), " 上海 " weight(0.6), " 山西 " weight(0.5))')

SELECT * FROM 文章 WHERE CONTAINS( 內(nèi)容 , 'ISABOUT (download weight(0.9), 上海 weight(0.6), 山西 weight(0.5))')

事實上在該 SELECT 語句的返回結(jié)果集里,并沒有按加權值的大小來排序,因為 WEIGHT 不影響 CONTAINS 查詢的結(jié)果,只會影響 CONTAINSTABLE 查詢中的排序。 說明:使用本例時最好將 內(nèi)容 字段的 斷字符語言 改回簡體中文,否則會影響中文的搜索結(jié)果

(7.1.5) 鄰近詞的搜索方式

鄰近詞的搜索方式可以搜索記錄中位置相近的兩個字符,例如要搜索文章標題為 教育部擬取消教師資格終身制實行定期認證 的文章,完整的標題名記不清楚了,只記得 教育部 資格 ,則可以以鄰近詞的搜索方式進行查詢

例六、搜索文章內(nèi)容中與教育部表示相關的記錄,其代碼如下:

SELECT * FROM 文章 WHERE CONTAINS( 內(nèi)容 ,' " 教育部 " NEAR " 表示 "')

(7.2) 使用 FREETEXT 搜索

FREETEXT 搜索方式與 CONTAINS 搜索方式相比,其搜索結(jié)果表現(xiàn)都十分不精確,因為 FREETEXT 的搜索方式是將一個句子中的每個單字拆分開進行搜索的。例如:如果使用 CONTAINS 搜索方式搜索條件為 教育部 的記錄,那么搜索出來的將是記錄里包含 教育部 三個字符串的記錄。如果使用 FREETEXT 搜索方式搜索條件為 教育部 的記錄,那么搜索出來的將是記錄里包含 的記錄。如果搜索的是英文字符串 “SQL Server 2005” ,則拆分為 “SQL” “Server” “2005” 來進行搜索,只要滿足其中一個條件都算搜索成功。 FREETEXT 的語法代碼參考聯(lián)機幫助 CONTAINS FREETEXT 兩種方式來搜索 教育部 字符串,其代碼如下:

SELECT * FROM 文章 WHERE FREETEXT( 內(nèi)容 ,' 教育部 ')

SELECT * FROM 文章 WHERE CONTAINS ( 內(nèi)容 ,' 教育部 ')

其運行結(jié)果如圖7.4 所示,使用 CONTAINS 查詢結(jié)果要比使用 FREETEXT 的查詢結(jié)果記錄數(shù)要少得多。

7.4CONTAINS和FREETEXT的查詢結(jié)果 7.4CONTAINS和FREETEXT的查詢結(jié)果

(7.3) 使用 CONTAINSTABLE 搜索

CONTAINSTABLE 函數(shù)與 CONTAINS 謂詞類似,其可以返回符合條件的多條記錄,但是返回的記錄是作為數(shù)據(jù)表出現(xiàn)在 SELECT 語句的 FROM 子句中。這個數(shù)據(jù)表里只包含兩個字段:一個字段名為 “KEY” ,該字段顯示的是全文索引的唯一索引鍵的內(nèi)容,也就是圖 14.6 所示界面中所創(chuàng)建的索引列;另一個字段名為 “RANK” ,該字段是排名值字段,其排名值是由系統(tǒng)依查詢符合的程度自動生成的。 CONTAINSTABLE 的語法代碼參考聯(lián)機幫助

CONTAINSTABLE CONTAINS 的搜索條件一樣分為五類,其形式也幾乎一樣,只是增加了 table top_n_by_rank 兩個參數(shù):

table :全文索引所在的數(shù)據(jù)表名。

top_n_by_rank :返回的記錄數(shù),相當于 SELECT 語句中的 top n

下面舉幾個例子說明 CONTAINSTABLE CONTAINS 在用法上不同的地方。

查看文章表中內(nèi)容含有 教育部 的記錄的編號,其代碼如下:

SELECT * FROM CONTAINSTABLE( 文章 , 內(nèi)容 ,' 教育部 ') as table1

在本例中可以看到, CONTAINSTABLE 返回的結(jié)果是作為數(shù)據(jù)表的形式出現(xiàn)在 FROM 子句中。其運行結(jié)果如圖 7.5 所示,查詢的結(jié)果也就是 CONTAINSTABLE 返回的數(shù)據(jù)表的結(jié)果,只有兩個字段。

7.5CONTAINSTABLE返回的結(jié)果 7.5CONTAINSTABLE返回的結(jié)果

查看文章表中內(nèi)容含有 教育部 表示 的前十條記錄,并按查詢符合程度排序,其代碼如下:

SELECT * FROM 文章 JOIN CONTAINSTABLE( 文章 , 內(nèi)容 ,' " 教育部 " NEAR " 表示 " ',10) as table

ON 文章 . 編號 = table1.[KEY] ORDER BY table1.RANK DESC

其運行結(jié)果如圖7.6 所示,在本例中,將 CONTAINSTABLE 函數(shù)返回的數(shù)據(jù)表與文章表 JOIN 起來進行聯(lián)合查詢,就好像一個真實的數(shù)據(jù)表一樣。由于 KEY 是關鍵字,所以在本例當中用方括號將 KEY 括起來。

7.6例九的運行結(jié)果 7.6例九的運行結(jié)果

例十、搜索文章表中內(nèi)容中含有 “download” 上海 山西 的記錄,并為不同的條件加上加權值,然后按權值排序。其代碼如下: SELECT * FROM 文章 JOIN CONTAINSTABLE( 文章 , 內(nèi)容 , 'ISABOUT ("download" weight(0.9), " 上海 " weight(0.6), " 山西 " weight(0.1))') AS TABLE1 ON 文章 . 編號 = TABLE1.[KEY] ORDER BY TABLE1.RANK DESC 其運行結(jié)果如圖 7.7 所示, RANK 字段是依符合程度生成的數(shù)據(jù)再加上權值后的結(jié)果

7.7例十的運行結(jié)果 7.7例十的運行結(jié)果

(7.4) 使用 FREETEXTTABLE 搜索

CONTAINSTABLE 一樣, FREETEXTTABLE 函數(shù)也是返回擁有 KEY RANK 兩個字段的表,該表可以和數(shù)據(jù)庫中的數(shù)據(jù)表一樣使用。 FREETEXTTABLE 的語法 FREETEXT 謂詞的語法代碼相似,只是多了 table top_n_by_rank 兩個參數(shù)。

例十一、查看文章表中 內(nèi)容 字段含有 教育部 的前十條記錄,其代碼如下:

SELECT 文章 . 內(nèi)容 ,TABLE1.* FROM 文章 JOIN FREETEXTTABLE( 文章 , 內(nèi)容 ,' 教育部 ',8) AS TABLE1

ON 文章 . 編號 = TABLE1.[KEY]

(7.5) 搜索 image 字段

SQL Server 2005 image 類型的字段里,不僅僅是可以存儲圖形文件,還可以存儲如可執(zhí)行文件、音樂文件、文本文件等眾多文件類型。 SQL Server 2005 支持對存儲在 image 類型的字段里的一些文件的內(nèi)容進行全文搜索,但在創(chuàng)建全文索引時必須指明存儲在 image 字段里的文件的類型。如圖5.3 所示

SQL Server 2005 支持對存儲在 image 中的純文本文件、網(wǎng)頁文件、 Word 文件、 Excel 文件和 PowerPoint 文件的內(nèi)容進行查詢,其擴展名字段必須分別為 txt htm doc xls ppt 。全文索引創(chuàng)建完畢后,對 image 字段里的文件內(nèi)容進行查詢的方法與其他字段的查詢方法是一樣的:

例十二、查詢存儲在文章表的文件字段里的內(nèi)容包含 數(shù)據(jù)庫 的文件,其代碼如下

SELECT 編號 , 標題 , 文件 , 擴展名 FROM 文章 WHERE CONTAINS( 文件 ,' 數(shù)據(jù)庫 ')

(8)2005新增:與全文索引相關的T-SQL語句

SQL Server 2005 以前的版本中,創(chuàng)建與管理全文目錄、全文索引主要是使用存儲過程來完成。從 SQL Server 2005 開始新增加了一些與全文索引相關的 T-SQL 語句,可以用來創(chuàng)建與管理全文目錄和全文索引。

(8.1) 創(chuàng)建全文目錄

創(chuàng)建全文目錄的 T-SQL 語句為

例十三、在 Northwind 數(shù)據(jù)庫中創(chuàng)建一個名為 “TSQL 全文目錄 全文目錄,其代碼如下:

CREATE FULLTEXT CATALOG TSQL 全文目錄

ON FILEGROUP [PRIMARY]

IN PATH 'E:"book"SQL Server 2005 大全 " 數(shù)據(jù)庫 " 第十四章 " 運行后數(shù)據(jù)庫 '

AS DEFAULT

(8.2) 更改全文目錄屬性

創(chuàng)建完全文目錄之后,如果發(fā)現(xiàn)其設置有不如意之處,可以用 T-SQL 語句對其進行修改。更改全文目錄屬性的 T-SQL 語代碼如下:

例十四、重新生成 “TSQL 全文目錄 ,其代碼如下:

ALTER FULLTEXT CATALOG TSQL 全文目錄

REBUILD

(8.3) 創(chuàng)建全文索引

有了全文目錄后,可以在全文目錄里創(chuàng)建全文索引。一個全文目錄里可以包含多個全文索引,但一個全文索引只能屬于一個全文目錄。每個數(shù)據(jù)表只能有一個全文索引。創(chuàng)建全文索引的 T-SQL 語句代碼如下:

例十五、為 文章 表的 標題 內(nèi)容 文件 三個字段創(chuàng)建全文索引,其代碼如下:

CREATE FULLTEXT INDEX

ON 文章 ( 標題 , 內(nèi)容 , 文件 TYPE COLUMN 擴展名 )

KEY INDEX PK_ 文章

ON TSQL 全文目錄

注意:由于在前面的章節(jié)里已經(jīng)為 文章 表創(chuàng)建了全文索引,因此在運行本例之前要先把原來創(chuàng)建的

Sql2005 全文索引(五)


更多文章、技術交流、商務合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 亚洲自拍第二页 | 亚洲一区二区三区免费 | 狠狠色噜噜狠狠狠狠色综合久 | 雅虎日本免费一区二区三区 | 综合欧美日韩一区二区三区 | 日韩成| 91国语精品自产拍在线观看一 | 狠狠色丁香久久婷婷综合丁香 | 国产永久免费高清动作片www | 精品亚洲视频在线观看 | 久久99久久成人免费播放 | 中文字幕一区二区精品区 | 日韩美女视频一区 | 亚洲精品无人区一区二区三区 | 四虎永久在线免费观看 | 99re热在线观看 | 热伊人99re久久精品最新地 | 国产小视频91 | 污网站视频在线观看 | 九九热播 | 成人在线免费 | 国产自制一区 | 日本欧美一区二区三区在线 | 四虎在线最新永久免费 | 久久精品vr中文字幕 | 国产一起色一起爱 | 国产真实乱子伦精品视 | 国产成人a v在线影院 | 欧美videofree高清杂交 | 国产爽片在线观看 | 综合久久影院 | 免费观看性欧美毛片 | 亚洲综合在线视频 | 欧美一级高清毛片aaa | 天天干妹子 | 久久综合亚洲一区二区三区 | 免费一级a毛片夜夜看 | 私人影院在线 | 天天操天天操天天操 | 91热久久免费精品99 | 亚洲另类在线视频 |