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

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

Sql2005 全文索引(五)

系統 2057 0

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

--> Author : wufeng4552

--> Date : 2009-10-15

實戰篇(續)

(7)使用全文搜索查詢

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

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

(7.1) 使用 CONTAINS 搜索

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

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

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

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

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

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

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

CONTAINS 具體語法請參考聯機幫助!

(7.1.1) 簡單詞的搜索方式

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

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

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

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

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

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

(7.1.2) 派生詞的搜索方式

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

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

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

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

7.1運行結果 7.1運行結果

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

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

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

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

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

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

7.3正確的運行結果 7.3正確的運行結果

(7.1.3) 前綴詞的搜索方式

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

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

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

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

(7.1.4) 加權詞的搜索方式

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

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

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

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

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

(7.1.5) 鄰近詞的搜索方式

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

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

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

(7.2) 使用 FREETEXT 搜索

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

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

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

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

7.4CONTAINS和FREETEXT的查詢結果 7.4CONTAINS和FREETEXT的查詢結果

(7.3) 使用 CONTAINSTABLE 搜索

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

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

table :全文索引所在的數據表名。

top_n_by_rank :返回的記錄數,相當于 SELECT 語句中的 top n 。

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

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

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

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

7.5CONTAINSTABLE返回的結果 7.5CONTAINSTABLE返回的結果

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

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

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

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

7.6例九的運行結果 7.6例九的運行結果

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

7.7例十的運行結果 7.7例十的運行結果

(7.4) 使用 FREETEXTTABLE 搜索

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

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

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

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

(7.5) 搜索 image 字段

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

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

例十二、查詢存儲在文章表的文件字段里的內容包含 數據庫 的文件,其代碼如下

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

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

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

(8.1) 創建全文目錄

創建全文目錄的 T-SQL 語句為

例十三、在 Northwind 數據庫中創建一個名為 “TSQL 全文目錄 全文目錄,其代碼如下:

CREATE FULLTEXT CATALOG TSQL 全文目錄

ON FILEGROUP [PRIMARY]

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

AS DEFAULT

(8.2) 更改全文目錄屬性

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

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

ALTER FULLTEXT CATALOG TSQL 全文目錄

REBUILD

(8.3) 創建全文索引

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

例十五、為 文章 表的 標題 內容 文件 三個字段創建全文索引,其代碼如下:

CREATE FULLTEXT INDEX

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

KEY INDEX PK_ 文章

ON TSQL 全文目錄

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

Sql2005 全文索引(五)


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

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

【本文對您有幫助就好】

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

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 久久免费看片 | 欧美视频在线视频 | 国产福利第一页 | 日本一本久 | 99九九成人免费视频精品 | 欧美男女视频 | 午夜影院在线视频 | 成人国产欧美精品一区二区 | 久草免费公开视频 | a毛片免费全部播放完整成 a毛片免费全部在线播放毛 | 成年女人视频免费免费看 | 欧美日韩一级片在线观看 | 神马影院我不卡在线观看 | 久久国产这里只有精品 | 手机看片日韩高清国产欧美 | 亚洲成人免费 | 久草在线视频在线观看 | a毛片视频免费观看影院 | chinese国产人妖视频网站 | 国产精品视频第一页 | 亚洲国产一区二区a毛片 | 国产嘿咻| 欧洲精品在线观看 | 久草在在线视频免费 | 深夜影院在线视频观看 | 99精品网| 久久综合久久综合久久 | 全黄一级裸片视频免费区 | 在线观看视频一区 | 国产精品成人免费视频不卡 | 中文字幕亚洲综久久2021 | 日韩aⅴ片| 99精品国产高清自在线看超 | 日本久久99 | 成人人观看的免费毛片 | 久久精品无码一区二区三区 | 国产精品久久久久久久久ktv | 久久免费视频3 | 四虎久久影院 | 亚洲 自拍 另类 制服在线 | 999人在线精品播放视频 |