




下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、前言在數(shù)據(jù)庫中快速搜索數(shù)據(jù),使用索引可以提高搜索速度,然而索引一般是建立在數(shù)字型或長度比較短的文本型字段上的,比如說編號、姓名等字段,如果建立在長度比較長的文本型字段上,更新索引將會花銷很多的時間。如在文章內(nèi)容字段里用like語句搜索一個關(guān)鍵字,當(dāng)數(shù)據(jù)表里的內(nèi)容很多時,這個時間可能會讓人難以忍受。在SQLServer中提供了一種名為全文索引的技術(shù),可以大大提高從長字符串里搜索數(shù)據(jù)的速度,在本第里,將會對全文索引進(jìn)行詳細(xì)的介紹(1)全文索引概念:全文索引與普通的索引不同,普通的索引是以B-tree結(jié)構(gòu)來維護(hù)的,而全文索引是一種特殊類型的基于標(biāo)記的功能性索引,是由MicrosoftSQLServe
2、r全文引擎服務(wù)創(chuàng)建和維護(hù)的。使用全文索引可以快速、靈活地為存儲在SQLServer數(shù)據(jù)庫中的文本數(shù)據(jù)創(chuàng)建基于關(guān)鍵字查詢的索引,與like語句不同,like語句的搜索是適用于字符模式的查詢,而全文索引是根據(jù)特定語言的規(guī)則對詞和短語的搜索,是針對語言的搜索。(2)全文索引常用術(shù)語(2.(1)索引:一種特殊的索引,能在給定的列中存儲有關(guān)重要的詞及位置的信息,使用這些信息可以快速進(jìn)行全文查詢,搜索包括特定詞或詞組的行.(2.(2)目錄:全文目錄是存儲全文索引的地方,全文目錄必須駐留在與SQLServer實例相關(guān)聯(lián)的本地硬盤上,每個全文目錄可用于滿足數(shù)據(jù)庫內(nèi)的一個或多個表的索引需求(2.(3)符與詞干分
3、析器:斷字符與詞干分析器都是用于對全文索引的數(shù)據(jù)進(jìn)行語言分析的.語言分析通常都會涉及到查找詞的邊界和組合動詞兩個方面,其中要查找詞的邊界,也就是確定哪幾個字符是詞,稱之為斷字”.組合動詞也就是詞干分析用于分析詞.根據(jù)語言的不同,語言分析規(guī)則也不盡相同,由此可以為每個全文索引列指定不同的語言.每種語言的斷字符能夠使得訪問語言生成的詞更為準(zhǔn)確(2.(4):由斷字符標(biāo)識的詞或字符串(2.(5)器:用于從存儲在varbinary(max)或image列中的文件內(nèi)提取指定的文本類型的文本,當(dāng)varbinary(max)或image列中包含帶有特定文件擴展名的文檔時,全文搜索會使用篩選器來解釋二進(jìn)制數(shù)據(jù),
4、篩選器會從文檔中提取文本化信息并用于建立索引(2.(6)(爬網(wǎng)):創(chuàng)建維護(hù)全文索引的過程叫填充,也叫爬網(wǎng).(2.(7)詞:經(jīng)常出現(xiàn),但又不是要搜索的詞.為了精簡全文索引,這些詞通常會被忽略.全文索引的體系SQLServer的全文索引是由SQLServerFullTextSearch服務(wù)來維護(hù)的,該服務(wù)可以在Windows操作系統(tǒng)的【管理工具】-【服務(wù)】里找到,如圖3.1所示,在此可以啟動、停止、暫停、恢復(fù)和重新啟動該服務(wù)只有SQLServerFullTextSearch服務(wù)在啟動狀態(tài)時,才能使用全文索引.SQLServerFullTextSearch服務(wù)由兩個部分組件支持:一個是Microso
5、ftFull-TextEngineforSQLServer(MSFTESQL),也就是SQLServer全文搜索引擎另一個是MicrosoftFull-TextEngineFilterDeamon(MSFTEFD),也就是全文搜索引擎過濾器.MicrosoftFull-TextEngineforSQLServer的作用是填充全文索引、管理全文索引和全文目錄、幫助對SQLServer數(shù)據(jù)庫中的數(shù)據(jù)表進(jìn)行全文搜索。MicrosoftFull-TextEngineFilterDeamon包含篩選器,協(xié)議處理程序和斷字符三個組件,其作用是負(fù)責(zé)從數(shù)據(jù)表中訪問和篩選數(shù)據(jù)以及進(jìn)行斷字和詞干分析。其中,篩選器
6、的作用是從文檔中提取文本信息,并將非文本信息和格式化信息(如換行符、字體大小等信息)刪除,然后生成文本字符串和屬性的對應(yīng),并將它們傳遞給索引引擎;協(xié)議處理程序用于從指定數(shù)據(jù)庫中的表內(nèi)訪問數(shù)據(jù);斷字符用于在查詢或抓取的文檔中確定字符邊界位置。全文索引組件負(fù)責(zé)對全文索引的初始填充以及當(dāng)全文索引表中的數(shù)據(jù)被修改時的更新。當(dāng)全文填充(爬網(wǎng))開始后,數(shù)據(jù)庫引擎會將大量的數(shù)據(jù)存儲到內(nèi)存里,并通知MicrosoftFull-TextEngineforSQLServer(MSFTESQL)開始進(jìn)行索引。當(dāng)MSFTESQL服務(wù)接到進(jìn)行索引的通知后,使用協(xié)議處理程序組件從內(nèi)存中取得數(shù)據(jù)進(jìn)行處理后生成全文索引。MS
7、FTESQL服務(wù)會將數(shù)據(jù)表中的某一列或幾列中的字符和二進(jìn)制數(shù)據(jù)編制成索引。在對varbinary(max)或image列中的數(shù)據(jù)編制索引時,篩選器會將基于為該數(shù)據(jù)指定的文件格式來提取文本。在處理索引的過程中MSFTESQL服務(wù)通過斷字符來將收集到的文本數(shù)據(jù)分隔成各個單獨的標(biāo)記或關(guān)鍵字。這個過程就是全文索引的過程。由于全文索引與普通的索引不同,全文索引并不是存儲在數(shù)據(jù)表中,而是存儲在全文目錄中,所以在使用全文索引來搜索數(shù)據(jù)時,其運行的流程和普通索引也不一樣。如圖所示,當(dāng)SQLServer發(fā)出全文搜索的請求后,會將搜索的條件傳遞給全文搜索引擎過濾器,經(jīng)過MSFTEFD處理后,將數(shù)據(jù)提供給MSFTE
8、SQL,再由MSFTESQL從全文目錄中找到符合要求的數(shù)據(jù),再返回給SQLServer進(jìn)行后續(xù)操作。這就是進(jìn)行全文搜索的過程JO部份SQL卬向SQL三中口 3一到口*(4)全文目錄管理在前面章節(jié)里提到,全文目錄的作用是存儲全文索引,所以要創(chuàng)建全文索引必須先創(chuàng)建全文目錄(4.(1)全文目錄創(chuàng)建全文目錄的方法如下:(1)啟動【SQLServerManagementStudio,連接到本地默認(rèn)實例,在【對象資源管理器】窗口里,選擇本地數(shù)據(jù)庫實例-【數(shù)據(jù)庫】-Northwind-【存儲】-【全文目錄】。(2)右擊【全文目錄】,在彈出的快捷菜單里選擇【新建全文目錄】選項。(3)彈出如圖4.1所示的【新建
9、全文目錄】對話框,在該對話框的【全文目錄名稱】文本框內(nèi)可以輸入全文目錄的名稱;在【目錄位置】文本框內(nèi)可以輸入全文目錄的存儲路徑,單擊其后的【】按鈕可以選擇路徑,如果不輸入的話,默認(rèn)存儲在FilesMicProgramosoftSQLServerMSSQL.1MSSQLFTData”目錄下;在【文件組】下拉列表框里可以選擇全文目錄所屬的文件組;在【所有者】文本框里可以輸入全文目錄的所有者;選中【設(shè)置為默認(rèn)目錄】復(fù)選框可以將此目錄設(shè)置為全文目錄的默認(rèn)目錄;【區(qū)分重音】單選框用于指明目錄是否區(qū)分標(biāo)注字符。4.11新建全文目錄】對話框(4)設(shè)置完畢后單擊【確定】按鈕完成操作。(4.(2)與修改全文目錄
10、全文目錄添加完畢之后,可以在【對象資源管理器】窗口的【全文目錄】樹下看到新建的全文目錄。雙擊該全文目錄,或右擊該全文目錄,在彈出的快捷菜單里選擇【屬性】選項,將會彈出如圖4.2所示【全文目錄屬性】對話框,在該對話框里可以查看全文目錄的屬性內(nèi)容。在【全文目錄屬性】對話框里有三個標(biāo)簽:【常規(guī)】選項卡里可以查看和修改全文目錄的設(shè)置;【表/視圖】選項里可以查看和修改為全文目錄分配的表和視圖;【填充計劃】選項項里可以添加或修改確定何在如圖4.2所示的【全文目錄時填充或重新填充全文目錄的計劃。屬性】對話框里,可以看到全文目錄所屬的文件組、名稱、上次填充的時間、項計數(shù)、填充狀態(tài)、目錄大小、唯一鍵計數(shù)的內(nèi)容,
11、這些內(nèi)容是不能修改的。可以修改項為:【默認(rèn)目錄】、【所有者】和【區(qū)分重音】三個選項內(nèi)容。在【目錄】操作區(qū)域,有三個單選按鈕,其中【無】表示不執(zhí)行優(yōu)化目錄、重新生成目錄和重新填充目錄操作;選擇【優(yōu)化目錄】選項將會優(yōu)化目錄的空間利用率、提高搜索結(jié)果相關(guān)排名的準(zhǔn)確性,從而提高查詢性能;選擇【重新生成目錄】選項將會刪除并重新生成全文目錄,如果對全文目錄的屬性進(jìn)行了更改,則必須執(zhí)行該操作,例如在本對話框中修改了區(qū)分重音選擇,則【目錄】操作區(qū)域會自動變成灰色,系統(tǒng)自動重新生成全文目錄;選擇【重新填充目錄】選項將會使用數(shù)據(jù)的最新更改來更新目錄。修改完畢之后,單擊【確定】按鈕完成操作圖4.2查看全文目錄屬性(
12、4.(3)全文目錄當(dāng)全文目錄不再需要使用時,可以將其刪除,刪除方式如下:(1)啟動【SQLServerManagementStudio,連接到本地默認(rèn)實例,在【對象資源管理器】窗口里,選擇本地數(shù)據(jù)庫實例-【數(shù)據(jù)庫】-Northwind-【存儲】-【全文目錄】。(2)右擊要刪除的全文目錄名,在彈出的快捷菜單里選擇【刪除】選項。(3)在彈出的【對象刪除】對話框中單擊【確定】按鈕完成操作。如果要一次性刪除多個全文目錄,可以先在【對象資源管理器】窗口中定位到【全文目錄】樹,在【摘要】對話框里選擇多個全文目錄,然后單擊鼠標(biāo)右鍵,在彈出的快捷菜單里選擇【刪除】選項。在彈出的【對象刪除】對話框中單擊【確定】
13、按鈕完成操作戟篇()(5)全文索引管理在創(chuàng)建完全文目錄之后,可以動手創(chuàng)建全文索引了,下面將介紹如何創(chuàng)建、編輯和刪除全文索引.(5.(1)全文索引的注意事項在創(chuàng)建全文索引之前,先介紹創(chuàng)建全文索引要注意的事項:全文索引是針對數(shù)據(jù)表的,只能對數(shù)據(jù)表創(chuàng)建全文索引,不能對數(shù)據(jù)庫創(chuàng)建全文索引。在一個數(shù)據(jù)庫中可以創(chuàng)建多個全文目錄,每個全文目錄都可以存儲一個或多個全文索引,但是每一個數(shù)據(jù)表只能夠創(chuàng)建一個全文索引,一個全文索引中可以包含多個字段。要創(chuàng)建全文索引的數(shù)據(jù)表必須要有一個唯一的針對單列的非空索引,也就是說,必須要有主鍵,或者是具備唯一性的非空索引,并且這個主鍵或具有唯一性的非空索引只能是一個字段,不能是
14、多字段的組合。包含在全文索引里的字段只能是字符型的或image型的字段(5.(2)全文索引卜面以Northwind數(shù)據(jù)的“文章”表為例,介紹如何創(chuàng)建全文索引:(1)啟動【SQLServerManagementStudio,連接到本地默認(rèn)實例,在【對象資源管理器】窗口里,選擇本地數(shù)據(jù)庫實例【數(shù)據(jù)庫】-【Northwind】-【表】-【文章】。(2)右擊【文章】數(shù)據(jù)表,在彈出的快捷菜單里選擇【全文索引】-【定義全文索引】。(3)彈出如圖5.1所示【全文索引向?qū)А繉υ捒?,此對話框中顯示的是全文索引向?qū)У慕榻B,單擊【下一步】按鈕。索引向?qū)А繉υ捒?4)彈出如圖5.2所示的【選擇索引】對話框,此時可以選
15、擇要創(chuàng)建全文索引的數(shù)據(jù)表的唯一索引,使用該索引作為全文索引的唯一索引。在【唯一索引】下拉列表框里,列出該表中所有的唯一索引。在該對話框里選擇唯一索引后,單擊【下一步】按鈕5.11全文(5)彈出如圖5.3所示【選擇表列】對話框,此時可以選擇要加入全文索引的字段。在該對話框里可以選擇一個或多個字段加入全文索引。SQLServer2005可以對存儲在image類型的字段中的文件進(jìn)行全文搜索。image類型的字段中可以存入各種文件,但是SQLServer2005只支持Word、Excel、PowerPoint、網(wǎng)頁和純文本文件類型。如果要對image類型的字段里的文件進(jìn)行全文搜索,必須還要有一個字符串
16、類型的字段用于指明存儲在image字段中的文件的擴展名。如圖5.3中的文件字段,如果要對其創(chuàng)建全文索引,必須還要指定類型列。選擇完畢后單擊【下一步】按鈕5.21選擇索列】對話框(6)彈出【選擇更改跟蹤】對話框,在該對話框里可以定義全文索引的更新方式,一共有三種更新方式:【自動】:選中此單選按鈕后,當(dāng)基礎(chǔ)數(shù)據(jù)發(fā)生更改時,全文索引將自動更新;【手動】:如果不希望基礎(chǔ)數(shù)據(jù)發(fā)生更改時自動更新全文索引,請選中此單選按鈕。對基礎(chǔ)數(shù)據(jù)的更改將保留下來。不過,若要將更改應(yīng)用到全文索引,必須手動啟動或安排此進(jìn)程;【不跟蹤更改】:如果不希望使用基礎(chǔ)數(shù)據(jù)的更改對全文索引進(jìn)行更新,設(shè)置完畢后單擊【下一步】按鈕。5.3
17、1選擇表請選中此單選按鈕。更改跟蹤】對話框(7)彈出如圖5.5所示的【選擇目錄】對話框,在此可以選擇全文索引所存儲的全文目錄。如果沒有要選擇的全文目錄,也可以在此新建一個全文目錄。創(chuàng)建全文目錄的方法與上節(jié)中所說的一樣。選擇完畢后單擊【下一步】按鈕。5.41選擇錄】對話框(8)彈出如圖5.6所示的【定義填充計劃】對話框,在此可以創(chuàng)建全文索引和全文目錄的填充計劃,也可以單擊【下一步】,在創(chuàng)建完全文索引后再創(chuàng)建填充計劃5.51選擇目填充計劃】對話框(9)彈出如圖5.7所示的【全文索引向?qū)дf明】對話框,在該對話框里可以看到全文索引要完成的工作說明,如果有不正確的設(shè)置,可以單擊【上一步】按鈕返回去重新設(shè)
18、置,如果完全正確則單擊【完成】按鈕完成操作。5.6定義索引向?qū)дf明】(5.(3)與修改全文索引在創(chuàng)建完全文索引之后,右擊數(shù)據(jù)表,在彈出的快捷菜單里選擇【全文索引】-【屬性】可以查看全文索引的設(shè)置,如圖5.8所示(5.(4)引屬性】在圖5.8中可以看到全文索引的目前設(shè)置情況,在該對話框中可以修改是否啟用全文索引和全文索引的更改跟蹤信息。單擊【列】標(biāo)簽,打開如圖5.9所示的全文索引的列信息,在此可以修改全文索引所包含的列信息。5.71全文(5.(1)(5.(4)和禁用全文索引全文索引創(chuàng)建完畢之后,不會立即自動啟用,所以需要手動啟用全文索引。啟動全文索引的方法如下:(1)在【對象資源管理器】窗口里展
19、開樹形目錄,定位到要啟用全文索引的數(shù)據(jù)表。(2)右擊要啟用全文索引的數(shù)據(jù)表,在彈出的快捷菜單中選擇【全文索引】-【啟用全文索引】。如果要禁用全文索引,也可以采取以下的方法來禁用全文索引:(1)在【對象資源管理器】窗口里展開樹形目錄,定位到要啟用全文索引的數(shù)據(jù)表。(2)右擊要禁用全文索引的數(shù)據(jù)表,在彈出的快捷菜單中選擇【全文索引】-【禁用全文索引】。(5.(5)全文索引當(dāng)全文索引不再使用時,可以將其刪除,刪除方法如下:(1)右擊要刪除全文索引的數(shù)據(jù)表,在彈出的快捷菜單里選擇【全文索引】a【刪除全文索引】。(2)在彈出的【刪除全文索引】對話框里單擊【確定】按鈕完成操作。戟篇()(6)填充全文索引填
20、充全文索引實質(zhì)上就是更新全文索引,其目的是讓全文索引可能夠反映最新的數(shù)據(jù)表內(nèi)容。(6.(1)全文索引的方式填充全文索引一共有三種方式:完全填充:完全填充方式通常發(fā)生在首次填充全文目錄或全文索引時,在前一節(jié)中所說到的“啟用全文索引”時,就已經(jīng)對全文索引進(jìn)行了一次完全填充,以后就可以使用基于更改跟蹤的填充和基于增量時間戳的填充來維護(hù)全文索引?;诟母櫡绞降奶畛洌篠QLServer會記錄設(shè)置了全文索引的數(shù)據(jù)表中修改的行,這些記錄存儲在日志中,在某個適當(dāng)時機時將這些更改填入到全文索引中?;谠隽繒r間戳方式的填充:也就是增量填充,在全文索引中更新上次填充之后更新的行。增量填充要求索引表中必須有tim
21、estamp數(shù)據(jù)類型的字段,如果沒有該類型的字段,則無法執(zhí)行增量填充,系統(tǒng)將會以完全填充的方式來取代增量填充方式進(jìn)行填充(6.(2)全文索引由于填充全文索引有三種不同的方式,所以填充全文索引的方法也不相同。如果要以完全填充或增量填充方式來填充全文索引,則只要右擊全文索引所在的數(shù)據(jù)表,在彈出的快捷菜單里選擇【全文索引】-【啟動完全填充】或【啟動增量填充】選項即可如圖6.1所示6.1填充全文索引改為手動方式,可以右擊全文索引所在的數(shù)據(jù)表,在彈出的快捷菜單里選擇【全文索引】-【手動跟蹤更改】選項,如圖6.1所示選擇完畢之后,SQLServer會自動跟蹤數(shù)據(jù)表中的數(shù)據(jù)更改情況,但并不將其更新到全文索引
22、中,只有在需要將這些更新反應(yīng)到全文索引上時,右擊全文索引所在的數(shù)據(jù)表,在彈出的快捷菜單里選擇【全文索引】-【應(yīng)用跟蹤的更改】選項后,才會將更新反應(yīng)到全文索引上如果在圖6.1所示界面里選擇了【自動跟蹤更改】選項,則由SQLServer自動將記錄的數(shù)據(jù)表的更改更新到全文索引中,不再需要人工進(jìn)行填充。如果在數(shù)據(jù)庫中有多個數(shù)據(jù)表創(chuàng)建了全文索引,可以使用重新生成索引目錄的方法將所有的全文索引進(jìn)行完全填充,其方法如下:(1)在【對象資源管理器】窗口里展開樹形目錄,定位到【服務(wù)器】-【數(shù)據(jù)庫】-1Northwind-【存儲】-【全文目錄】。(2)右擊【全文目錄】,在彈出的快捷菜單中選擇【全部重新生成】選項。
23、(3)在彈出的【重新生成所有全文目錄】對話框里單擊【確定】按鈕完成操作。(6.3)定時填充全文索引更改跟蹤方式填充全文索引分為手動和自動兩種方法,在默認(rèn)情況下是自動填充,如果要更在SQLServer2005中,可以為填充全文索引設(shè)置計劃,讓系統(tǒng)自動定時填充全文索引,其方法如下:(1)右擊全文索引所在的數(shù)據(jù)表,在彈出的快捷菜單里選擇【全文索弓I】看全文索引的設(shè)置,如圖5.8所示,在該圖中選擇【計劃】選項(2)彈出如圖6.2所示全文索引填充計劃對話框,在該對話框中單擊【新建】按鈕(3)彈出如圖6.3所示的【新建全文索引表計劃】對話框【屬性】來查6.31新建全文索引表計劃】在【名稱】文本框里可以輸入
24、該計劃名稱。在【計劃類型】下拉列表框里,可選項有“ServerSQ典啟動時自動啟動”:也就是在SQLServer代理啟動時自動填充全文索引;“空閑CPU動”:也就是當(dāng)CPU空閑時填充全文索引;“執(zhí)行一次”:在指定時間時填充全文索引,只填充一次;“重復(fù)執(zhí)行”:可以設(shè)定多次填充全文索引的方式。如果選中【已啟用】復(fù)選框,則啟用該填充全文索引的計劃。在【執(zhí)行一次】區(qū)域里,可以設(shè)置計劃類型為“執(zhí)行一次”的執(zhí)行時間,在到達(dá)該時間時,自動填充全文索引。在【頻率】區(qū)域里,可以設(shè)置計劃類型為“重復(fù)執(zhí)行”的執(zhí)行頻率。在【執(zhí)行】下拉列表框里可選擇項為“每天”、“每周”和“每月”,分別用于指定每天、每周和每月執(zhí)行填充
25、計劃的頻率。在【持續(xù)時間】區(qū)域里可以設(shè)置該計劃的開始日期與結(jié)束日期,其中結(jié)束日期可以設(shè)置為無結(jié)束日期,也就是永遠(yuǎn)執(zhí)行下去(4)設(shè)置完畢后單擊【確定】按鈕完成計劃設(shè)計,返回如圖6.4所示對話框6.4全文索引填充計劃對話框(5)在如圖6.4所示對話框里,可以選擇全文索引填充計劃所要執(zhí)行的填充方式,設(shè)置完畢后單擊【確定】按鈕完成操作。注意:如果單擊【確定】按鈕之后出現(xiàn)如圖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所示的填充計劃對話框,其添加計劃的步驟與創(chuàng)建全文索引的填充計劃幾乎相同,在此就不再贅述了。戟篇()(7)使用全文搜索查詢設(shè)置完全文索引并填充完畢之后,就可以通過全文搜索來查詢數(shù)據(jù)了。使用全文搜索來查詢數(shù)據(jù)所用到的T-SQL語句也是SELECT語句,只是在設(shè)置查詢條件時和前面所說過的SELECT語句的查詢條件設(shè)置有些不同。在T-SQL語言中,可以在
27、SELECT語句的WHERE子句里設(shè)置全文搜索的查詢條件,也可以在6.5添加計劃失FROM子句里設(shè)置查詢條件,此時將返回結(jié)果作為FROM子句中的表格來使用。如果要在WHERE子句里設(shè)置全文搜索的查詢條件,可以使用CONTAINS和FREETEXT兩個謂詞;如果要在FROM子句里設(shè)置全文搜索的查詢條件,可以使用CONTAINSTABLE和FREETEXTTABLE兩個行集值函數(shù).(7.1)使用CONTAINS搜索CONTAINS用于SELECT語句的WHERE子句中,可以支持使用復(fù)雜的語法在字符列中搜索詞、子句、衍生字或位置相近的字符串。使用CONTAINS謂詞可以在數(shù)據(jù)表中使用以下五種形式搜索
28、數(shù)據(jù):簡單詞:也就是可以搜索一個或多個特定的詞或短語。詞可以包括一個或多個字符,中間沒有空格或標(biāo)點。短語可以是由空格分隔的多個詞組成,但詞之間可以有標(biāo)點也可以沒標(biāo)點。派生詞:也就是可以搜索特定詞的變形,一般是指英語中的單詞,其有過去式、現(xiàn)在式、將來式等不同的形式。派生詞是指可以包含該單詞的所有其他形式。前綴詞:也就是可以搜索指定文本開頭的詞或短語。一般也用于英文單詞中,可以指定一個英文單詞的前幾個字母來作為搜索條件。加權(quán)詞:也就是可以給多個搜索條件加上權(quán)值,加權(quán)值越高的記錄排在越前面。鄰近詞:也就是可以搜索與另一個詞或短語相鄰近的詞或短語。下面分別介紹如何使用這些不同的方式來搜索數(shù)據(jù)CONTA
29、INS具ft言吾法吉青參考助!(7.1.(1)詞的搜索方式簡單詞的搜索方式就是搜索一個或多個特定的詞或短語。例一、搜索文章表的標(biāo)題中含有“上海”的記錄,其代碼如下:SELECT*FROM文章WHERECONTAINS(標(biāo)題,上海)例二、搜索文章表的內(nèi)容中含有“上?!被颉皬V州”的記錄,其代碼如下:SELECT*FROM文章WHERECONTAINS(內(nèi)容,上海OR廣州)注意例二與例一的不同,在CONTAINS謂詞的第二個參數(shù)里,將“上海OR“廣州”做為一個字符串傳遞CONTAINS。使用以下代碼將會出錯:SELECT*FROM文章WHERECONTAINS(內(nèi)容,上海OR廣州)(7.1.(2)詞
30、的搜索方式派生詞的搜索方式主要用在英文當(dāng)中,因為英文單詞中含有現(xiàn)在式、過去式、將來式、單復(fù)數(shù)等不同的形式,使派生詞的搜索方式可以將字段中包括該單詞的所有形式的記錄都搜索出來。例如使用派生詞方式搜索包含單詞download的記錄,則會把包含download、downloading等派生詞的記錄都搜索出來。例三、搜索文章表中內(nèi)容中含有download及其派生詞的記錄,其代碼如下:SELECT*FROM文章WHERECONTAINS(內(nèi)容,FORMSOF(INFLECTIONAL,download)JKflIwMiAdBhPfciM*udOeHFtoadEwnftydNULLhll7.1行結(jié)果在圖7
31、.1中可以看到只查詢到一條記錄,而并未將download的派生詞也搜索進(jìn)來,這是因為從一開始設(shè)置全文索引時,所采用的是數(shù)據(jù)庫默認(rèn)的斷字符語言,即簡體中文,而在中文中沒有派生詞,所以使用派生詞方式搜索數(shù)據(jù)是起不到其作用的。此時可以通過修改全文索引的斷字符語言來達(dá)到搜索效果。修改方式如下:(1)右擊全文索引所在的數(shù)據(jù)表,在彈出的快捷菜單中選擇【全文索引】-【屬性】-【全文索引屬性】對話框。(2)在【全文索引屬性】對話框里選擇【列】選項,彈出如圖7.2所示對話框,修改【內(nèi)容】字段的【斷字符語言】為“English”。7.2修改斷字符語言(3)單擊【確定】按鈕完成操作。再次運行例三中的代碼,其運行結(jié)果
32、如圖7.3所示。(7.1.(3)詞的搜索方式前綴詞的搜索方式主要也是用在搜索英文中,例如搜索以ctor、document、download等單詞都搜索出來。例四、搜索文章表中內(nèi)容中含有do”開頭的單詞的記錄,其代碼如下:7.3正確的運行結(jié)果do”開頭的地詞,則可以將ISELECT*FROM文章WHERECONTAINS(內(nèi)容,do*)此方式有點類似與like子句的通配符方式,但只能使用“*,并且只能放在英文字母之后,如“*do、“*do*”都是錯誤的表達(dá)方式。(7.1.(4)詞的搜索方式當(dāng)以多個字符串作為搜索條件搜索記錄時,可以為不同的字符串加上一個加權(quán)值,這個加權(quán)值是介于0和1之間的數(shù)值,加
33、權(quán)值越高的記錄排在越前面例五、搜索文章表中內(nèi)容中含有“download、“上?!薄ⅰ吧轿鳌钡挠涗?,并為不同的條件加上加權(quán)值,其代碼如下:SELECT*FROM文章WHERECONTAINS(內(nèi)容,ISABOUT(downloadweight(0.9),上海weight(0.6),山西weight(0.5)或SELECT*FROM文章WHERECONTAINS(內(nèi)容,ISABOUT(downloadweight(0.9),上海weight(0.6),山西weight(0.5)事實上在該SELECT語句的返回結(jié)果集里,并沒有按加權(quán)值的大小來排序,因為WEIGHT不影響CONTAINS查詢的結(jié)果,只
34、會影響CONTAINSTABLE查詢中的排序。說明:使用本例時最好將“內(nèi)容”字段的“斷字符語言”改回簡體中文,否則會影響中文的搜索結(jié)果(7.1.(5)詞的搜索方式鄰近詞的搜索方式可以搜索記錄中位置相近的兩個字符,例如要搜索文章標(biāo)題為“教育部擬取消教師資格終身制實行定期認(rèn)證”的文章,完整的標(biāo)題名記不清楚了,只記得“教育部”和“資格”,則可以以鄰近詞的搜索方式進(jìn)行查詢例六、搜索文章內(nèi)容中與教育部表示相關(guān)的記錄,其代碼如下:SELECT*FROM文章WHERECONTAINS(內(nèi)容,教育部NEAR表示)(7.(2)FREETEXT搜索FREETEXT搜索方式與CONTAINS搜索方式相比,其搜索結(jié)果
35、表現(xiàn)都十分不精確,因為FREETEXT的搜索方式是將一個句子中的每個單字拆分開進(jìn)行搜索的。例如:如果使用CONTAINS搜索方式搜索條件為“教育部”的記錄,那么搜索出來的將是記錄里包含“教育部”三個字符串的記錄。如果使用FREETEXT搜索方式搜索條件為“教育部”的記錄,那么搜索出來的將是記錄里包含“教”或“育”或“部”的記錄。如果搜索的是英文字符串“Server2005:則拆分為“SQL”、“Server”和“2005”來進(jìn)行搜索,只要滿足其中一個條件都算搜索成功。FREETEXT的語法代碼參考耳酎助用CONTAINS和FREETEXT兩種方式來搜索“教育部”字符串,其代碼如下:SELECT
36、*FROM文章WHEREFREETEXT(內(nèi)容,教育部)SELECT*FROM文章WHERECONTAINS(內(nèi)容,教育部)其運行結(jié)果如圖7.4所示,使用CONTAINS查詢結(jié)果要比使用FREETEXT的查詢結(jié)果記錄數(shù)要少得多。TEXT的查詢結(jié)果(7.(3)CONTAINSTABLE搜索CONTAINSTABLE函數(shù)與CONTAINS謂詞類似,其可以返回符合條件的多條記錄,但是返回的記錄是作為數(shù)據(jù)表出現(xiàn)在SELECT語句的FROM子句中。這個數(shù)據(jù)表里只包含兩個字段:一個字段名為“KEY”,該字段顯示的是全文索引的唯一索引鍵的內(nèi)容,也就是圖14.6所示界面中所創(chuàng)建的索引列;另一個字段名為“RAN
37、K”,該字段是排名值字段,其排名值是由系統(tǒng)依查詢符合的程度自動生成的。CONTAINSTABLE的語法代碼參考助CONTAINSTABLE與CONTAINS的搜索條件一樣分為五類,其形式也幾乎一樣,只是增加了table和top_n_by_rank兩個參數(shù):table:全文索引所在的數(shù)據(jù)表名。top_n_by_rank:返回的記錄數(shù),相當(dāng)于SELECT語句中的topn。7.4CONTAINS和FREE下面舉幾個例子說明CONTAINSTABLE與CONTAINS在用法上不同的地方。查看文章表中內(nèi)容含有“教育部”的記錄的編號,其代碼如下:SELECT*FROMCONTAINSTABLE(文章,內(nèi)容
38、,教育部)astablel在本例中可以看到,CONTAINSTABLE返回的結(jié)果是作為數(shù)據(jù)表的形式出現(xiàn)在FROM子句中。其運行結(jié)果如圖7.5所示,查詢的結(jié)果也就是CONTAINSTABLE返回的數(shù)據(jù)表的結(jié)果,只有兩個字段。查看文章表中內(nèi)容含有“教育部”和“表示”的前十條記錄,并按查詢符合程度排序,其代碼如下:SELECT*FROM文章JOINCONTAINSTABLE(文章,內(nèi)容,教育部NEAR表示,10)astableON文章.編號=table1.KEYORDERBYtable1.RANKDESC其運行結(jié)果如圖7.6所示,在本例中,將CONTAINSTABLE函數(shù)返回的數(shù)據(jù)表與文章表JOIN
39、起來進(jìn)行聯(lián)合查詢,就好像一個真實的數(shù)據(jù)表一樣。由于KEY是關(guān)鍵字,所以在本例當(dāng)中用方括號將KEY括起來。例十、搜索文章表中內(nèi)容中含有“download”、“上?!?、“山西”的記錄,并為不同的條件加上加權(quán)值,然后按權(quán)值排序。其代碼如下:SELECT*FROM文章JOINCONTAI7.5CONTAINSTABLE返回的結(jié)果7.6例九的運行結(jié)果*1用3|NSTABLE(文章,內(nèi)容,ISABOUT(downloadweight(0.9),上海weight(0.6),山西weight(0.1)ASTABLE1ON文章.編號=TABLE1.KEYORDERBYTABLE1.RANKDESC其運行結(jié)果如圖
40、7.7所示,RANK字段是依符合程度生成的數(shù)據(jù)再加上權(quán)值后的結(jié)果二雄町浦(7.(4)FREETEXTTABLE搜索與CONTAINSTABLE一樣,F(xiàn)REETEXTTABLE函數(shù)也是返回?fù)碛蠯EY和RANK兩個字段的表,該表可以和數(shù)據(jù)庫中的數(shù)據(jù)表一樣使用。FREETEXTTABLE的語法與FREETEXT謂詞的語法代碼相似,只是多了table和top_n_by_rank兩個參數(shù)。例十一、查看文章表中“內(nèi)容”字段含有“教育部”的前十條記錄,其代碼如下:SELECT文章.內(nèi)容,TABLE1.*FROM文章JOINFREETEXTTABLE(文章,內(nèi)容,教育部,8)ASTABLE1ON文章編號=TA
41、BLE1.KEY(7.(5)image字段在SQLServer2005的image類型的字段里,不僅僅是可以存儲圖形文件,還可以存儲如可執(zhí)行文件、音樂文件、文本文件等眾多文件類型。SQLServer2005支持對存儲在image類型的字段里的一些文件的內(nèi)容進(jìn)行全文搜索,但在創(chuàng)建全文索引時必須指明存儲在image字段里的文件的類型。如圖5.3所示SQLServer2005支持對存儲在image中的純文本文件、網(wǎng)頁文件、Word文件、Excel文件和PowerPoint文件的內(nèi)容進(jìn)行查詢,其擴展名字段必須分別為txt、htm、doc、xls和ppt。全文索引創(chuàng)建完畢后,對image字段里的文件內(nèi)容
42、進(jìn)行查詢的方法與其他字段的查詢方法是一樣的:例十二、查詢存儲在文章表的文件字段里的內(nèi)容包含“數(shù)據(jù)庫”的文件,其代碼如下SELECT編號,標(biāo)題,文彳擴展名FROM文章WHERECONTAINS(文件,數(shù)據(jù)庫)(8)2005新增:與全文索引相關(guān)的T-SQL語句在SQLServer2005以前的版本中,創(chuàng)建與管理全文目錄、全文索引主要是使用存儲過程來完成。從SQLServer2005開始新增加了一些與全文索引相關(guān)的T-SQL語句,可以用來創(chuàng)建與管理全文目錄和全文索引。(8.(1)全文目錄創(chuàng)建全文目錄的T-SQL語句為例十三、在Northwind數(shù)據(jù)庫中創(chuàng)建一個名為“TSQL全文目錄”全文目錄,其代碼如下:CREATEFULLTEXTCATALOGTSQL全文目錄ONFILEGROUPPRIMARYINPATHE:bookSQLServer2005大全數(shù)據(jù)庫第十四章運行后數(shù)據(jù)庫ASDEFAULT(8.(2)全文目錄屬性創(chuàng)建完全文目錄之后,如果發(fā)現(xiàn)其設(shè)置有不如意之處,可以用T-SQL語句對其進(jìn)行修改。更改全文目錄屬性的T-SQL語代碼如下:例十四、重新生成“TS切錄”,其代碼如下:ALTERFULLTEXTCATALOGTSQL全文目錄REBUILD(8.(3)全文索引有
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 女性心靈成長活動方案
- 學(xué)校新聞寫作活動方案
- 媒體接待活動方案
- 學(xué)校心理健康活動方案
- 學(xué)校一日游活動方案
- 孫氏太極拳活動方案
- 如何推廣qc活動方案
- 女職工工會活動方案
- 學(xué)??扉W店活動策劃方案
- 孟津二院義診活動方案
- 消防水鶴安裝工程施工方案及主要技術(shù)措施
- 《高校教師師德修養(yǎng)》課件
- 2024年深圳市房屋租賃合同(3篇)
- 學(xué)校食品安全投訴舉報制度及流程
- 人教部編版七年級語文上冊《秋天的懷念》示范課教學(xué)課件
- 2024年保育員(初級)考試題及答案
- 廣西壯族賀州市2024年小升初考試數(shù)學(xué)試卷含解析
- “非遺”之首-昆曲經(jīng)典藝術(shù)欣賞智慧樹知到期末考試答案章節(jié)答案2024年北京大學(xué)
- SMP-04-013-00 藥品受托企業(yè)審計評估管理規(guī)程
- 店鋪代運營合同范本
- 兒童樂園安全管理制度
評論
0/150
提交評論