SQL2005全文索引_第1頁
SQL2005全文索引_第2頁
SQL2005全文索引_第3頁
SQL2005全文索引_第4頁
SQL2005全文索引_第5頁
免費預覽已結束,剩余38頁可下載查看

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、前言在數據庫中快速搜索數據,使用索引可以提高搜索速度,然而索引一般是建立在數字型或長度比較短的文本型字段上的,比如說編號、姓名等字段,如果建立在長度比較長的文本型字段上,更新索引將會花銷很多的時間。如在文章內容字段里用like語句搜索一個關鍵字,當數據表里的內容很多時,這個時間可能會讓人難以忍受。在SQLServer中提供了一種名為全文索引的技術,可以大大提高從長字符串里搜索數據的速度,在本第里,將會對全文索引進行詳細的介紹(1)全文索引概念:全文索引與普通的索引不同,普通的索引是以B-tree結構來維護的,而全文索引是一種特殊類型的基于標記的功能性索引,是由MicrosoftSQLServe

2、r全文引擎服務創建和維護的。使用全文索引可以快速、靈活地為存儲在SQLServer數據庫中的文本數據創建基于關鍵字查詢的索引,與like語句不同,like語句的搜索是適用于字符模式的查詢,而全文索引是根據特定語言的規則對詞和短語的搜索,是針對語言的搜索。(2)全文索引常用術語(2.(1)索引:一種特殊的索引,能在給定的列中存儲有關重要的詞及位置的信息,使用這些信息可以快速進行全文查詢,搜索包括特定詞或詞組的行.(2.(2)目錄:全文目錄是存儲全文索引的地方,全文目錄必須駐留在與SQLServer實例相關聯的本地硬盤上,每個全文目錄可用于滿足數據庫內的一個或多個表的索引需求(2.(3)符與詞干分

3、析器:斷字符與詞干分析器都是用于對全文索引的數據進行語言分析的.語言分析通常都會涉及到查找詞的邊界和組合動詞兩個方面,其中要查找詞的邊界,也就是確定哪幾個字符是詞,稱之為斷字”.組合動詞也就是詞干分析用于分析詞.根據語言的不同,語言分析規則也不盡相同,由此可以為每個全文索引列指定不同的語言.每種語言的斷字符能夠使得訪問語言生成的詞更為準確(2.(4):由斷字符標識的詞或字符串(2.(5)器:用于從存儲在varbinary(max)或image列中的文件內提取指定的文本類型的文本,當varbinary(max)或image列中包含帶有特定文件擴展名的文檔時,全文搜索會使用篩選器來解釋二進制數據,

4、篩選器會從文檔中提取文本化信息并用于建立索引(2.(6)(爬網):創建維護全文索引的過程叫填充,也叫爬網.(2.(7)詞:經常出現,但又不是要搜索的詞.為了精簡全文索引,這些詞通常會被忽略.全文索引的體系SQLServer的全文索引是由SQLServerFullTextSearch服務來維護的,該服務可以在Windows操作系統的【管理工具】-【服務】里找到,如圖3.1所示,在此可以啟動、停止、暫停、恢復和重新啟動該服務只有SQLServerFullTextSearch服務在啟動狀態時,才能使用全文索引.SQLServerFullTextSearch服務由兩個部分組件支持:一個是Microso

5、ftFull-TextEngineforSQLServer(MSFTESQL),也就是SQLServer全文搜索引擎另一個是MicrosoftFull-TextEngineFilterDeamon(MSFTEFD),也就是全文搜索引擎過濾器.MicrosoftFull-TextEngineforSQLServer的作用是填充全文索引、管理全文索引和全文目錄、幫助對SQLServer數據庫中的數據表進行全文搜索。MicrosoftFull-TextEngineFilterDeamon包含篩選器,協議處理程序和斷字符三個組件,其作用是負責從數據表中訪問和篩選數據以及進行斷字和詞干分析。其中,篩選器

6、的作用是從文檔中提取文本信息,并將非文本信息和格式化信息(如換行符、字體大小等信息)刪除,然后生成文本字符串和屬性的對應,并將它們傳遞給索引引擎;協議處理程序用于從指定數據庫中的表內訪問數據;斷字符用于在查詢或抓取的文檔中確定字符邊界位置。全文索引組件負責對全文索引的初始填充以及當全文索引表中的數據被修改時的更新。當全文填充(爬網)開始后,數據庫引擎會將大量的數據存儲到內存里,并通知MicrosoftFull-TextEngineforSQLServer(MSFTESQL)開始進行索引。當MSFTESQL服務接到進行索引的通知后,使用協議處理程序組件從內存中取得數據進行處理后生成全文索引。MS

7、FTESQL服務會將數據表中的某一列或幾列中的字符和二進制數據編制成索引。在對varbinary(max)或image列中的數據編制索引時,篩選器會將基于為該數據指定的文件格式來提取文本。在處理索引的過程中MSFTESQL服務通過斷字符來將收集到的文本數據分隔成各個單獨的標記或關鍵字。這個過程就是全文索引的過程。由于全文索引與普通的索引不同,全文索引并不是存儲在數據表中,而是存儲在全文目錄中,所以在使用全文索引來搜索數據時,其運行的流程和普通索引也不一樣。如圖所示,當SQLServer發出全文搜索的請求后,會將搜索的條件傳遞給全文搜索引擎過濾器,經過MSFTEFD處理后,將數據提供給MSFTE

8、SQL,再由MSFTESQL從全文目錄中找到符合要求的數據,再返回給SQLServer進行后續操作。這就是進行全文搜索的過程JO部份SQL卬向SQL三中口 3一到口*(4)全文目錄管理在前面章節里提到,全文目錄的作用是存儲全文索引,所以要創建全文索引必須先創建全文目錄(4.(1)全文目錄創建全文目錄的方法如下:(1)啟動【SQLServerManagementStudio,連接到本地默認實例,在【對象資源管理器】窗口里,選擇本地數據庫實例-【數據庫】-Northwind-【存儲】-【全文目錄】。(2)右擊【全文目錄】,在彈出的快捷菜單里選擇【新建全文目錄】選項。(3)彈出如圖4.1所示的【新建

9、全文目錄】對話框,在該對話框的【全文目錄名稱】文本框內可以輸入全文目錄的名稱;在【目錄位置】文本框內可以輸入全文目錄的存儲路徑,單擊其后的【】按鈕可以選擇路徑,如果不輸入的話,默認存儲在FilesMicProgramosoftSQLServerMSSQL.1MSSQLFTData”目錄下;在【文件組】下拉列表框里可以選擇全文目錄所屬的文件組;在【所有者】文本框里可以輸入全文目錄的所有者;選中【設置為默認目錄】復選框可以將此目錄設置為全文目錄的默認目錄;【區分重音】單選框用于指明目錄是否區分標注字符。4.11新建全文目錄】對話框(4)設置完畢后單擊【確定】按鈕完成操作。(4.(2)與修改全文目錄

10、全文目錄添加完畢之后,可以在【對象資源管理器】窗口的【全文目錄】樹下看到新建的全文目錄。雙擊該全文目錄,或右擊該全文目錄,在彈出的快捷菜單里選擇【屬性】選項,將會彈出如圖4.2所示【全文目錄屬性】對話框,在該對話框里可以查看全文目錄的屬性內容。在【全文目錄屬性】對話框里有三個標簽:【常規】選項卡里可以查看和修改全文目錄的設置;【表/視圖】選項里可以查看和修改為全文目錄分配的表和視圖;【填充計劃】選項項里可以添加或修改確定何在如圖4.2所示的【全文目錄時填充或重新填充全文目錄的計劃。屬性】對話框里,可以看到全文目錄所屬的文件組、名稱、上次填充的時間、項計數、填充狀態、目錄大小、唯一鍵計數的內容,

11、這些內容是不能修改的。可以修改項為:【默認目錄】、【所有者】和【區分重音】三個選項內容。在【目錄】操作區域,有三個單選按鈕,其中【無】表示不執行優化目錄、重新生成目錄和重新填充目錄操作;選擇【優化目錄】選項將會優化目錄的空間利用率、提高搜索結果相關排名的準確性,從而提高查詢性能;選擇【重新生成目錄】選項將會刪除并重新生成全文目錄,如果對全文目錄的屬性進行了更改,則必須執行該操作,例如在本對話框中修改了區分重音選擇,則【目錄】操作區域會自動變成灰色,系統自動重新生成全文目錄;選擇【重新填充目錄】選項將會使用數據的最新更改來更新目錄。修改完畢之后,單擊【確定】按鈕完成操作圖4.2查看全文目錄屬性(

12、4.(3)全文目錄當全文目錄不再需要使用時,可以將其刪除,刪除方式如下:(1)啟動【SQLServerManagementStudio,連接到本地默認實例,在【對象資源管理器】窗口里,選擇本地數據庫實例-【數據庫】-Northwind-【存儲】-【全文目錄】。(2)右擊要刪除的全文目錄名,在彈出的快捷菜單里選擇【刪除】選項。(3)在彈出的【對象刪除】對話框中單擊【確定】按鈕完成操作。如果要一次性刪除多個全文目錄,可以先在【對象資源管理器】窗口中定位到【全文目錄】樹,在【摘要】對話框里選擇多個全文目錄,然后單擊鼠標右鍵,在彈出的快捷菜單里選擇【刪除】選項。在彈出的【對象刪除】對話框中單擊【確定】

13、按鈕完成操作戟篇()(5)全文索引管理在創建完全文目錄之后,可以動手創建全文索引了,下面將介紹如何創建、編輯和刪除全文索引.(5.(1)全文索引的注意事項在創建全文索引之前,先介紹創建全文索引要注意的事項:全文索引是針對數據表的,只能對數據表創建全文索引,不能對數據庫創建全文索引。在一個數據庫中可以創建多個全文目錄,每個全文目錄都可以存儲一個或多個全文索引,但是每一個數據表只能夠創建一個全文索引,一個全文索引中可以包含多個字段。要創建全文索引的數據表必須要有一個唯一的針對單列的非空索引,也就是說,必須要有主鍵,或者是具備唯一性的非空索引,并且這個主鍵或具有唯一性的非空索引只能是一個字段,不能是

14、多字段的組合。包含在全文索引里的字段只能是字符型的或image型的字段(5.(2)全文索引卜面以Northwind數據的“文章”表為例,介紹如何創建全文索引:(1)啟動【SQLServerManagementStudio,連接到本地默認實例,在【對象資源管理器】窗口里,選擇本地數據庫實例【數據庫】-【Northwind】-【表】-【文章】。(2)右擊【文章】數據表,在彈出的快捷菜單里選擇【全文索引】-【定義全文索引】。(3)彈出如圖5.1所示【全文索引向導】對話框,此對話框中顯示的是全文索引向導的介紹,單擊【下一步】按鈕。索引向導】對話框(4)彈出如圖5.2所示的【選擇索引】對話框,此時可以選

15、擇要創建全文索引的數據表的唯一索引,使用該索引作為全文索引的唯一索引。在【唯一索引】下拉列表框里,列出該表中所有的唯一索引。在該對話框里選擇唯一索引后,單擊【下一步】按鈕5.11全文(5)彈出如圖5.3所示【選擇表列】對話框,此時可以選擇要加入全文索引的字段。在該對話框里可以選擇一個或多個字段加入全文索引。SQLServer2005可以對存儲在image類型的字段中的文件進行全文搜索。image類型的字段中可以存入各種文件,但是SQLServer2005只支持Word、Excel、PowerPoint、網頁和純文本文件類型。如果要對image類型的字段里的文件進行全文搜索,必須還要有一個字符串

16、類型的字段用于指明存儲在image字段中的文件的擴展名。如圖5.3中的文件字段,如果要對其創建全文索引,必須還要指定類型列。選擇完畢后單擊【下一步】按鈕5.21選擇索列】對話框(6)彈出【選擇更改跟蹤】對話框,在該對話框里可以定義全文索引的更新方式,一共有三種更新方式:【自動】:選中此單選按鈕后,當基礎數據發生更改時,全文索引將自動更新;【手動】:如果不希望基礎數據發生更改時自動更新全文索引,請選中此單選按鈕。對基礎數據的更改將保留下來。不過,若要將更改應用到全文索引,必須手動啟動或安排此進程;【不跟蹤更改】:如果不希望使用基礎數據的更改對全文索引進行更新,設置完畢后單擊【下一步】按鈕。5.3

17、1選擇表請選中此單選按鈕。更改跟蹤】對話框(7)彈出如圖5.5所示的【選擇目錄】對話框,在此可以選擇全文索引所存儲的全文目錄。如果沒有要選擇的全文目錄,也可以在此新建一個全文目錄。創建全文目錄的方法與上節中所說的一樣。選擇完畢后單擊【下一步】按鈕。5.41選擇錄】對話框(8)彈出如圖5.6所示的【定義填充計劃】對話框,在此可以創建全文索引和全文目錄的填充計劃,也可以單擊【下一步】,在創建完全文索引后再創建填充計劃5.51選擇目填充計劃】對話框(9)彈出如圖5.7所示的【全文索引向導說明】對話框,在該對話框里可以看到全文索引要完成的工作說明,如果有不正確的設置,可以單擊【上一步】按鈕返回去重新設

18、置,如果完全正確則單擊【完成】按鈕完成操作。5.6定義索引向導說明】(5.(3)與修改全文索引在創建完全文索引之后,右擊數據表,在彈出的快捷菜單里選擇【全文索引】-【屬性】可以查看全文索引的設置,如圖5.8所示(5.(4)引屬性】在圖5.8中可以看到全文索引的目前設置情況,在該對話框中可以修改是否啟用全文索引和全文索引的更改跟蹤信息。單擊【列】標簽,打開如圖5.9所示的全文索引的列信息,在此可以修改全文索引所包含的列信息。5.71全文(5.(1)(5.(4)和禁用全文索引全文索引創建完畢之后,不會立即自動啟用,所以需要手動啟用全文索引。啟動全文索引的方法如下:(1)在【對象資源管理器】窗口里展

19、開樹形目錄,定位到要啟用全文索引的數據表。(2)右擊要啟用全文索引的數據表,在彈出的快捷菜單中選擇【全文索引】-【啟用全文索引】。如果要禁用全文索引,也可以采取以下的方法來禁用全文索引:(1)在【對象資源管理器】窗口里展開樹形目錄,定位到要啟用全文索引的數據表。(2)右擊要禁用全文索引的數據表,在彈出的快捷菜單中選擇【全文索引】-【禁用全文索引】。(5.(5)全文索引當全文索引不再使用時,可以將其刪除,刪除方法如下:(1)右擊要刪除全文索引的數據表,在彈出的快捷菜單里選擇【全文索引】a【刪除全文索引】。(2)在彈出的【刪除全文索引】對話框里單擊【確定】按鈕完成操作。戟篇()(6)填充全文索引填

20、充全文索引實質上就是更新全文索引,其目的是讓全文索引可能夠反映最新的數據表內容。(6.(1)全文索引的方式填充全文索引一共有三種方式:完全填充:完全填充方式通常發生在首次填充全文目錄或全文索引時,在前一節中所說到的“啟用全文索引”時,就已經對全文索引進行了一次完全填充,以后就可以使用基于更改跟蹤的填充和基于增量時間戳的填充來維護全文索引?;诟母櫡绞降奶畛洌篠QLServer會記錄設置了全文索引的數據表中修改的行,這些記錄存儲在日志中,在某個適當時機時將這些更改填入到全文索引中。基于增量時間戳方式的填充:也就是增量填充,在全文索引中更新上次填充之后更新的行。增量填充要求索引表中必須有tim

21、estamp數據類型的字段,如果沒有該類型的字段,則無法執行增量填充,系統將會以完全填充的方式來取代增量填充方式進行填充(6.(2)全文索引由于填充全文索引有三種不同的方式,所以填充全文索引的方法也不相同。如果要以完全填充或增量填充方式來填充全文索引,則只要右擊全文索引所在的數據表,在彈出的快捷菜單里選擇【全文索引】-【啟動完全填充】或【啟動增量填充】選項即可如圖6.1所示6.1填充全文索引改為手動方式,可以右擊全文索引所在的數據表,在彈出的快捷菜單里選擇【全文索引】-【手動跟蹤更改】選項,如圖6.1所示選擇完畢之后,SQLServer會自動跟蹤數據表中的數據更改情況,但并不將其更新到全文索引

22、中,只有在需要將這些更新反應到全文索引上時,右擊全文索引所在的數據表,在彈出的快捷菜單里選擇【全文索引】-【應用跟蹤的更改】選項后,才會將更新反應到全文索引上如果在圖6.1所示界面里選擇了【自動跟蹤更改】選項,則由SQLServer自動將記錄的數據表的更改更新到全文索引中,不再需要人工進行填充。如果在數據庫中有多個數據表創建了全文索引,可以使用重新生成索引目錄的方法將所有的全文索引進行完全填充,其方法如下:(1)在【對象資源管理器】窗口里展開樹形目錄,定位到【服務器】-【數據庫】-1Northwind-【存儲】-【全文目錄】。(2)右擊【全文目錄】,在彈出的快捷菜單中選擇【全部重新生成】選項。

23、(3)在彈出的【重新生成所有全文目錄】對話框里單擊【確定】按鈕完成操作。(6.3)定時填充全文索引更改跟蹤方式填充全文索引分為手動和自動兩種方法,在默認情況下是自動填充,如果要更在SQLServer2005中,可以為填充全文索引設置計劃,讓系統自動定時填充全文索引,其方法如下:(1)右擊全文索引所在的數據表,在彈出的快捷菜單里選擇【全文索弓I】看全文索引的設置,如圖5.8所示,在該圖中選擇【計劃】選項(2)彈出如圖6.2所示全文索引填充計劃對話框,在該對話框中單擊【新建】按鈕(3)彈出如圖6.3所示的【新建全文索引表計劃】對話框【屬性】來查6.31新建全文索引表計劃】在【名稱】文本框里可以輸入

24、該計劃名稱。在【計劃類型】下拉列表框里,可選項有“ServerSQ典啟動時自動啟動”:也就是在SQLServer代理啟動時自動填充全文索引;“空閑CPU動”:也就是當CPU空閑時填充全文索引;“執行一次”:在指定時間時填充全文索引,只填充一次;“重復執行”:可以設定多次填充全文索引的方式。如果選中【已啟用】復選框,則啟用該填充全文索引的計劃。在【執行一次】區域里,可以設置計劃類型為“執行一次”的執行時間,在到達該時間時,自動填充全文索引。在【頻率】區域里,可以設置計劃類型為“重復執行”的執行頻率。在【執行】下拉列表框里可選擇項為“每天”、“每周”和“每月”,分別用于指定每天、每周和每月執行填充

25、計劃的頻率。在【持續時間】區域里可以設置該計劃的開始日期與結束日期,其中結束日期可以設置為無結束日期,也就是永遠執行下去(4)設置完畢后單擊【確定】按鈕完成計劃設計,返回如圖6.4所示對話框6.4全文索引填充計劃對話框(5)在如圖6.4所示對話框里,可以選擇全文索引填充計劃所要執行的填充方式,設置完畢后單擊【確定】按鈕完成操作。注意:如果單擊【確定】按鈕之后出現如圖6.5所示的失敗對話框,請先安裝SQLServer2005最新禱丁且我仃用座.Maaa:kU*號 Mb“gyMwl:E的帕。i*Utfl wMJ,AflI*Kt,MLitfJKKttVnMS 了 JtS.(HaMft-5*vw.3M

26、AiW*30壽祗.fkntSQlSvwt1*K3KJ-敗對話框使用類似的方法也可以定時填充全文目錄:(1)右擊全文目錄名,在彈出的快捷菜單里選擇【屬性】選項。(2)在彈出的如圖6.1所示的【全文目錄屬性】對話框里選擇【填充計劃】選項。(3)彈出與6.2所示的填充計劃對話框,其添加計劃的步驟與創建全文索引的填充計劃幾乎相同,在此就不再贅述了。戟篇()(7)使用全文搜索查詢設置完全文索引并填充完畢之后,就可以通過全文搜索來查詢數據了。使用全文搜索來查詢數據所用到的T-SQL語句也是SELECT語句,只是在設置查詢條件時和前面所說過的SELECT語句的查詢條件設置有些不同。在T-SQL語言中,可以在

27、SELECT語句的WHERE子句里設置全文搜索的查詢條件,也可以在6.5添加計劃失FROM子句里設置查詢條件,此時將返回結果作為FROM子句中的表格來使用。如果要在WHERE子句里設置全文搜索的查詢條件,可以使用CONTAINS和FREETEXT兩個謂詞;如果要在FROM子句里設置全文搜索的查詢條件,可以使用CONTAINSTABLE和FREETEXTTABLE兩個行集值函數.(7.1)使用CONTAINS搜索CONTAINS用于SELECT語句的WHERE子句中,可以支持使用復雜的語法在字符列中搜索詞、子句、衍生字或位置相近的字符串。使用CONTAINS謂詞可以在數據表中使用以下五種形式搜索

28、數據:簡單詞:也就是可以搜索一個或多個特定的詞或短語。詞可以包括一個或多個字符,中間沒有空格或標點。短語可以是由空格分隔的多個詞組成,但詞之間可以有標點也可以沒標點。派生詞:也就是可以搜索特定詞的變形,一般是指英語中的單詞,其有過去式、現在式、將來式等不同的形式。派生詞是指可以包含該單詞的所有其他形式。前綴詞:也就是可以搜索指定文本開頭的詞或短語。一般也用于英文單詞中,可以指定一個英文單詞的前幾個字母來作為搜索條件。加權詞:也就是可以給多個搜索條件加上權值,加權值越高的記錄排在越前面。鄰近詞:也就是可以搜索與另一個詞或短語相鄰近的詞或短語。下面分別介紹如何使用這些不同的方式來搜索數據CONTA

29、INS具ft言吾法吉青參考助!(7.1.(1)詞的搜索方式簡單詞的搜索方式就是搜索一個或多個特定的詞或短語。例一、搜索文章表的標題中含有“上海”的記錄,其代碼如下:SELECT*FROM文章WHERECONTAINS(標題,上海)例二、搜索文章表的內容中含有“上海”或“廣州”的記錄,其代碼如下:SELECT*FROM文章WHERECONTAINS(內容,上海OR廣州)注意例二與例一的不同,在CONTAINS謂詞的第二個參數里,將“上海OR“廣州”做為一個字符串傳遞CONTAINS。使用以下代碼將會出錯:SELECT*FROM文章WHERECONTAINS(內容,上海OR廣州)(7.1.(2)詞

30、的搜索方式派生詞的搜索方式主要用在英文當中,因為英文單詞中含有現在式、過去式、將來式、單復數等不同的形式,使派生詞的搜索方式可以將字段中包括該單詞的所有形式的記錄都搜索出來。例如使用派生詞方式搜索包含單詞download的記錄,則會把包含download、downloading等派生詞的記錄都搜索出來。例三、搜索文章表中內容中含有download及其派生詞的記錄,其代碼如下:SELECT*FROM文章WHERECONTAINS(內容,FORMSOF(INFLECTIONAL,download)JKflIwMiAdBhPfciM*udOeHFtoadEwnftydNULLhll7.1行結果在圖7

31、.1中可以看到只查詢到一條記錄,而并未將download的派生詞也搜索進來,這是因為從一開始設置全文索引時,所采用的是數據庫默認的斷字符語言,即簡體中文,而在中文中沒有派生詞,所以使用派生詞方式搜索數據是起不到其作用的。此時可以通過修改全文索引的斷字符語言來達到搜索效果。修改方式如下:(1)右擊全文索引所在的數據表,在彈出的快捷菜單中選擇【全文索引】-【屬性】-【全文索引屬性】對話框。(2)在【全文索引屬性】對話框里選擇【列】選項,彈出如圖7.2所示對話框,修改【內容】字段的【斷字符語言】為“English”。7.2修改斷字符語言(3)單擊【確定】按鈕完成操作。再次運行例三中的代碼,其運行結果

32、如圖7.3所示。(7.1.(3)詞的搜索方式前綴詞的搜索方式主要也是用在搜索英文中,例如搜索以ctor、document、download等單詞都搜索出來。例四、搜索文章表中內容中含有do”開頭的單詞的記錄,其代碼如下:7.3正確的運行結果do”開頭的地詞,則可以將ISELECT*FROM文章WHERECONTAINS(內容,do*)此方式有點類似與like子句的通配符方式,但只能使用“*,并且只能放在英文字母之后,如“*do、“*do*”都是錯誤的表達方式。(7.1.(4)詞的搜索方式當以多個字符串作為搜索條件搜索記錄時,可以為不同的字符串加上一個加權值,這個加權值是介于0和1之間的數值,加

33、權值越高的記錄排在越前面例五、搜索文章表中內容中含有“download、“上海”、“山西”的記錄,并為不同的條件加上加權值,其代碼如下:SELECT*FROM文章WHERECONTAINS(內容,ISABOUT(downloadweight(0.9),上海weight(0.6),山西weight(0.5)或SELECT*FROM文章WHERECONTAINS(內容,ISABOUT(downloadweight(0.9),上海weight(0.6),山西weight(0.5)事實上在該SELECT語句的返回結果集里,并沒有按加權值的大小來排序,因為WEIGHT不影響CONTAINS查詢的結果,只

34、會影響CONTAINSTABLE查詢中的排序。說明:使用本例時最好將“內容”字段的“斷字符語言”改回簡體中文,否則會影響中文的搜索結果(7.1.(5)詞的搜索方式鄰近詞的搜索方式可以搜索記錄中位置相近的兩個字符,例如要搜索文章標題為“教育部擬取消教師資格終身制實行定期認證”的文章,完整的標題名記不清楚了,只記得“教育部”和“資格”,則可以以鄰近詞的搜索方式進行查詢例六、搜索文章內容中與教育部表示相關的記錄,其代碼如下:SELECT*FROM文章WHERECONTAINS(內容,教育部NEAR表示)(7.(2)FREETEXT搜索FREETEXT搜索方式與CONTAINS搜索方式相比,其搜索結果

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

36、*FROM文章WHEREFREETEXT(內容,教育部)SELECT*FROM文章WHERECONTAINS(內容,教育部)其運行結果如圖7.4所示,使用CONTAINS查詢結果要比使用FREETEXT的查詢結果記錄數要少得多。TEXT的查詢結果(7.(3)CONTAINSTABLE搜索CONTAINSTABLE函數與CONTAINS謂詞類似,其可以返回符合條件的多條記錄,但是返回的記錄是作為數據表出現在SELECT語句的FROM子句中。這個數據表里只包含兩個字段:一個字段名為“KEY”,該字段顯示的是全文索引的唯一索引鍵的內容,也就是圖14.6所示界面中所創建的索引列;另一個字段名為“RAN

37、K”,該字段是排名值字段,其排名值是由系統依查詢符合的程度自動生成的。CONTAINSTABLE的語法代碼參考助CONTAINSTABLE與CONTAINS的搜索條件一樣分為五類,其形式也幾乎一樣,只是增加了table和top_n_by_rank兩個參數:table:全文索引所在的數據表名。top_n_by_rank:返回的記錄數,相當于SELECT語句中的topn。7.4CONTAINS和FREE下面舉幾個例子說明CONTAINSTABLE與CONTAINS在用法上不同的地方。查看文章表中內容含有“教育部”的記錄的編號,其代碼如下:SELECT*FROMCONTAINSTABLE(文章,內容

38、,教育部)astablel在本例中可以看到,CONTAINSTABLE返回的結果是作為數據表的形式出現在FROM子句中。其運行結果如圖7.5所示,查詢的結果也就是CONTAINSTABLE返回的數據表的結果,只有兩個字段。查看文章表中內容含有“教育部”和“表示”的前十條記錄,并按查詢符合程度排序,其代碼如下:SELECT*FROM文章JOINCONTAINSTABLE(文章,內容,教育部NEAR表示,10)astableON文章.編號=table1.KEYORDERBYtable1.RANKDESC其運行結果如圖7.6所示,在本例中,將CONTAINSTABLE函數返回的數據表與文章表JOIN

39、起來進行聯合查詢,就好像一個真實的數據表一樣。由于KEY是關鍵字,所以在本例當中用方括號將KEY括起來。例十、搜索文章表中內容中含有“download”、“上海”、“山西”的記錄,并為不同的條件加上加權值,然后按權值排序。其代碼如下:SELECT*FROM文章JOINCONTAI7.5CONTAINSTABLE返回的結果7.6例九的運行結果*1用3|NSTABLE(文章,內容,ISABOUT(downloadweight(0.9),上海weight(0.6),山西weight(0.1)ASTABLE1ON文章.編號=TABLE1.KEYORDERBYTABLE1.RANKDESC其運行結果如圖

40、7.7所示,RANK字段是依符合程度生成的數據再加上權值后的結果二雄町浦(7.(4)FREETEXTTABLE搜索與CONTAINSTABLE一樣,FREETEXTTABLE函數也是返回擁有KEY和RANK兩個字段的表,該表可以和數據庫中的數據表一樣使用。FREETEXTTABLE的語法與FREETEXT謂詞的語法代碼相似,只是多了table和top_n_by_rank兩個參數。例十一、查看文章表中“內容”字段含有“教育部”的前十條記錄,其代碼如下:SELECT文章.內容,TABLE1.*FROM文章JOINFREETEXTTABLE(文章,內容,教育部,8)ASTABLE1ON文章編號=TA

41、BLE1.KEY(7.(5)image字段在SQLServer2005的image類型的字段里,不僅僅是可以存儲圖形文件,還可以存儲如可執行文件、音樂文件、文本文件等眾多文件類型。SQLServer2005支持對存儲在image類型的字段里的一些文件的內容進行全文搜索,但在創建全文索引時必須指明存儲在image字段里的文件的類型。如圖5.3所示SQLServer2005支持對存儲在image中的純文本文件、網頁文件、Word文件、Excel文件和PowerPoint文件的內容進行查詢,其擴展名字段必須分別為txt、htm、doc、xls和ppt。全文索引創建完畢后,對image字段里的文件內容

42、進行查詢的方法與其他字段的查詢方法是一樣的:例十二、查詢存儲在文章表的文件字段里的內容包含“數據庫”的文件,其代碼如下SELECT編號,標題,文彳擴展名FROM文章WHERECONTAINS(文件,數據庫)(8)2005新增:與全文索引相關的T-SQL語句在SQLServer2005以前的版本中,創建與管理全文目錄、全文索引主要是使用存儲過程來完成。從SQLServer2005開始新增加了一些與全文索引相關的T-SQL語句,可以用來創建與管理全文目錄和全文索引。(8.(1)全文目錄創建全文目錄的T-SQL語句為例十三、在Northwind數據庫中創建一個名為“TSQL全文目錄”全文目錄,其代碼如下:CREATEFULLTEXTCATALOGTSQL全文目錄ONFILEGROUPPRIMARYINPATHE:bookSQLServer2005大全數據庫第十四章運行后數據庫ASDEFAULT(8.(2)全文目錄屬性創建完全文目錄之后,如果發現其設置有不如意之處,可以用T-SQL語句對其進行修改。更改全文目錄屬性的T-SQL語代碼如下:例十四、重新生成“TS切錄”,其代碼如下:ALTERFULLTEXTCATALOGTSQL全文目錄REBUILD(8.(3)全文索引有

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論