


版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、Sql2008 全文索引詳解1.使用全文搜索查詢數據 在數據庫中快速搜索數據,使用索引可以提高搜索速度,然而索引一般是建立在數字型 或長度比較短的文本型字段上的, 比如說編號、 姓名等字段, 如果建立在長度比較長的文本 型字段上,更新索引將會花銷很多的時間。如在文章內容字段里用lik e 語句搜索一個關鍵字, 當數據表里的內容很多時,這個時間可能會讓人難以忍受。在SQL Server中提供了一種名為全文索引的技術,可以大大提高從長字符串里搜索數 據的速度,在本章里,將會對全文索引進行詳細的介紹。1.1全文索引的介紹全文索引與普通的索引不同,普通的索引是以 B-tree 結構來維護的,而全文索引
2、是一 種特殊類型的基于標記的功能性索引,是由 Microsoft SQL Server 全文引擎服務創建和維護 的。使用全文索引可以快速、靈活地為存儲在 SQL Server 數據庫中的文本數據創建基于關 鍵字查詢的索引,與 lik e 語句不同, lik e 語句的搜索是適用于字符模式的查詢,而全文索 引是根據特定語言的規則對詞和短語的搜索,是針對語言的搜索。 在對大量的文本數據進行查詢時,全文索引可以大大地提高查詢的性能,如對于幾百萬 條記錄的文本數據進行 lik e 查詢可能要花幾分鐘才能返回結果,而使用全文索引則只要幾 秒鐘甚至更少的時間就可以返回結果了。1.2全文索引中常用的術語由于
3、全文索引中使用了較多的新的術語,在此先介紹這些術語:l 全文索引:一種特殊的索引,能在給定的列中存儲有關重要的詞及位置的信息, 使用這些信息可以快速進行全文查詢,搜索包括特定詞或詞組的行。l 全文目錄:全文目錄是存儲全文索引的地方,全文目錄必須駐留在與SQL Server 實例相關聯的本地硬盤上,每個全文目錄可用于滿足數據庫內的一個或多個表的 索引需求。l 斷字符與詞干分析器:斷字符與詞干分析器都是用于對全文索引的數據進行語言 分析的。語言分析通常都會涉及到查找詞的邊界和組合動詞兩個方面,其中要查找 詞的邊界,也就是確定哪幾個字符是“詞”,稱之為“斷字”。 組合動詞也就是詞干分析,用于分析詞。
4、根據語言的不同,語言分析規則也不盡相同,由此可以為每個全文索引列指定不同的語言。每種語言的斷字符能夠使得訪問語言生成的詞更為準確。l 標記:由斷字符標識的詞或字符串。l 篩選器:用于從存儲在 varbinary(max) 或 image 列中的文件內提取指定的文本 類型的文本。當 varbinary(max) 或 image 列中包含帶有特定文件擴展名的文檔時, 全文搜索會使用篩選器來解釋二進制數據,篩選器會從文檔中提取文本化信息并用 于建立索引。l 填充(爬網):創建維護全文索引的過程叫填充,也叫爬網。l 干擾詞:經常出現,但又不是要搜索的詞。為了精簡全文索引,這些詞通常會被 忽略。1.3
5、全文索引的體系結構 SQL Server 的全文索引是由 SQL Server FullText Search 服務來維護的,該服務可以在Win dows 操作系統的【管理工具】a【服務】里找到,如圖 1.1所示,在此可以啟動、停 止、暫停、恢復和重新啟動該服務。只有 SQL Server FullText Search 服務在啟動狀態時, 才能使用全文索引。圖 1.1 SQL Server FullText Search 服務SQL Server FullText Search 服務由兩個部分組件支持:一個是 Microsoft Full-Text Eng ine for SQL Serve
6、r ( MSFTESQL),也就是 SQL Server 全文搜索引擎;另一個是 Microsoft Full-Text Engine Filt er Deamon( MSFTEFD),也就是全文搜索引擎過濾器。Microsoft Full-Text Engine for SQL Server 的作用是填充全文索引、管理全文索引和全 文目錄、幫助對 SQL Server 數據庫中的數據表進行全文搜索。 Microsoft Full-Text Engine F ilter Deamon 包含篩選器、協議處理程序和斷字符三個組件,其作用是負責從數據表中訪 問和篩選數據以及進行斷字和詞干分析。 其中
7、, 篩選器的作用是從文檔中提取文本信息, 并將 非文本信息和格式化信息 (如換行符、字體大小等信息) 刪除,然后生成文本字符串和屬性 的對應, 并將它們傳遞給索引引擎; 協議處理程序用于從指定數據庫中的表內訪問數據; 斷 字符用于在查詢或抓取的文檔中確定字符邊界位置。全文索引組件負責對全文索引的初始填充以及當全文索引表中的數據被修改時的更新。 當全文填充(爬網)開始后,數據庫引擎會將大量的數據存儲到內存里,并通知MicrosoftFull-Text Engine for SQL Server ( MSFTESQL)開始進行索引。當 MSFTESQL 服務接到進 行索引的通知后, 使用協議處理程
8、序組件從內存中取得數據進行處理后生成全文索引。MSFTESQL 服務會將數據表中的某一列或幾列中的字符和二進制數據編制成索引。在對varbinary(max)或image列中的數據編制索引時,篩選器會將基于為該數據指定的文件格式來提取 文本。在處理索引的過程中 MSFTESQL 服務通過斷字符來將收集到的文本數據分隔成各個 單獨的標記或關鍵字。這個過程就是全文索引的過程。由于全文索引與普通的索引不同,全文索引并不是存儲在數據表中,而是存儲在全文目 錄中,所以在使用全文索引來搜索數據時,其運行的流程和普通索引也不一樣。如圖1.2 所示,當 SQL Server 發出全文搜索的請求后,會將搜索的條
9、件傳遞給全文搜 索引擎過濾器,經過 MSFTEFD處理后,將數據提供給 MSFTESQL,再由MSFTESQL從全文 目錄中找到符合要求的數據,再返回給 SQL Server 進行后續操作。這就是進行全文搜索的 過程。圖 1.2 全文搜索流程1.4全文目錄管理 在前面章節里提到,全文目錄的作用是存儲全文索引,所以要創建全文索引必須先創建 全文目錄。1.4.1 創建全文目錄 創建全文目錄的方法如下:( 1)啟動【 SQL Server Management Studio 】,連接到本地默認實例,在【對象資源管理器】窗口里,選擇本地數據庫實例a【數據庫】a【Northwind】a【存儲】a【全文目
10、錄】。(2 )右擊【全文目錄】,在彈出的快捷菜單里選擇【新建全文目錄】選項。(3 )彈出如圖 1.3 所示的【新建全文目錄】對話框,在該對話框的【全文目錄名稱】 文本框內可以輸入全文目錄的名稱; 在【目錄位置】 文本框內可以輸入全文目錄的存儲路徑, 單擊其后的【】按鈕可以選擇路徑, 如果不輸入的話,默認存儲在"Program Files'Microsoft SQL ServerMSSQL.1MSSQLFTData ”目錄下;在【文件組】下拉列表框里可以選擇全文 目錄所屬的文件組;在【所有者】文本框里可以輸入全文目錄的所有者;選中【設置為默認 目錄】 復選框可以將此目錄設置為全
11、文目錄的默認目錄; 【區分重音】單選框用于指明目錄 是否區分標注字符。圖1.3 【新建全文目錄】對話框(4 )設置完畢后單擊【確定】按鈕完成操作。1.4.2 查看與修改全文目錄 全文目錄添加完畢之后,可以在【對象資源管理器】窗口的【全文目錄】樹下看到新建 的全文目錄。 雙擊該全文目錄, 或右擊該全文目錄, 在彈出的快捷菜單里選擇 【屬性】 選項, 將會彈出如圖 1.4 所示【全文目錄屬性】對話框,在該對話框里可以查看全文目錄的屬性 內容。在【全文目錄屬性】對話框里有三個標簽:【常規】選項卡里可以查看和修改全文目錄 的設置;【表 /視圖】選項里可以查看和修改為全文目錄分配的表和視圖;【填充計劃】
12、選 項項里可以添加或修改確定何時填充或重新填充全文目錄的計劃。在如圖 1.4 所示的【全文目錄屬性】對話框里,可以看到全文目錄所屬的文件組、名 稱、上次填充的時間、項計數、填充狀態、目錄大小、唯一鍵計數的內容,這些內容是不能 修改的。可以修改項為:【默認目錄】、【所有者】和【區分重音】三個選項內容。圖 1.4 查看全文目錄屬性 在【目錄】操作區域,有三個單選按鈕,其中【無】表示不執行優化目錄、重新生成目 錄和重新填充目錄操作; 選擇【優化目錄】選項將會優化目錄的空間利用率、提高搜索結果 相關排名的準確性, 從而提高查詢性能; 選擇【重新生成目錄】選項將會刪除并重新生成全 文目錄, 如果對全文目
13、錄的屬性進行了更改, 則必須執行該操作, 例如在本對話框中修改了 區分重音選擇, 則【目錄】 操作區域會自動變成灰色, 系統自動重新生成全文目錄; 選擇【重 新填充目錄】選項將會使用數據的最新更改來更新目錄。修改完畢之后,單擊【確定】按鈕 完成操作。刪除全文目錄當全文目錄不再需要使用時,可以將其刪除,刪除方式如下:( 1)啟動【 SQL Server Management Studio 】,連接到本地默認實例,在【對象資源管理器】窗口里,選擇本地數據庫實例a【數據庫】a【Northwind】a【存儲】a【全文目錄】。(2 )右擊要刪除的全文目錄名,在彈出的快捷菜單里選擇【刪除】選項。(3 )在
14、彈出的【對象刪除】對話框中單擊【確定】按鈕完成操作。 如果要一次性刪除多個全文目錄,可以先在【對象資源管理器】窗口中定位到【全文目 錄】樹,在【摘要】對話框里選擇多個全文目錄,然后單擊鼠標右鍵,在彈出的快捷菜單里 選擇【刪除】選項。在彈出的【對象刪除】對話框中單擊【確定】按鈕完成操作。1.5全文索引管理在創建完全文目錄之后,可以動手創建全文索引了,下面將介紹如何創建、編輯和刪除 全文索引。創建全文索引的注意事項在創建全文索引之前,先介紹創建全文索引要注意的事項:l 全文索引是針對數據表的,只能對數據表創建全文索引,不能對數據庫創建全文 索引。l 在一個數據庫中可以創建多個全文目錄,每個全文目錄
15、都可以存儲一個或多個全 文索引,但是每一個數據表只能夠創建一個全文索引,一個全文索引中可以包含多 個字段。l 要創建全文索引的數據表必須要有一個唯一的針對單列的非空索引,也就是說, 必須要有主鍵,或者是具備唯一性的非空索引,并且這個主鍵或具有唯一性的非空 索引只能是一個字段,不能是多字段的組合。l 包含在全文索引里的字段只能是字符型的或 image 型的字段。創建全文索引下面以 Northwind 數據的“文章”表為例,介紹如何創建全文索引:(1)啟動【 SQL Server Management Studio 】,連接到本地默認實例,在【對象資源管理器】窗口里,選擇本地數據庫實例a 【數據庫
16、】a【Northwind】a【表】a【文章】。(2)右擊【文章】數據表,在彈出的快捷菜單里選擇【全文索引】a【定義全文索引】。(3)彈出如圖 1.5 所示【全文索引向導】對話框,此對話框中顯示的是全文索引向導 的介紹,單擊【下一步】按鈕。圖1.5 【全文索引向導】對話框(4)彈出如圖 1.6 所示的【選擇索引】對話框,此時可以選擇要創建全文索引的數據 表的唯一索引,使用該索引作為全文索引的唯一索引。在【唯一索引】下拉列表框里,列出 該表中所有的唯一索引。在該對話框里選擇唯一索引后,單擊【下一步】按鈕。圖1.6 【選擇索引】對話框(5)彈出如圖 1.7 所示【選擇表列】對話框,此時可以選擇要加入
17、全文索引的字段。 在該對話框里可以選擇一個或多個字段加入全文索引。 SQL Server 2005 可以對存儲在 imag文檔來源為 :從網絡收集整理 .word 版本可編輯 .歡迎下載支持 . e 類型的字段中的文件進行全文搜索。 image 類型的字段中可以存入各種文件,但是 SQL S erver 2005 只支持 Word 、 Excel、 PowerPoint 、網頁和純文本文件類型。如果要對image類型的字段里的文件進行全文搜索,必須還要有一個字符串類型的字段用于指明存儲在 ima ge 字段中的文件的擴展名。如圖 1.7 中的文件字段,如果要對其創建全文索引,必須還要 指定類型
18、列。選擇完畢后單擊【下一步】按鈕。圖 1.7 【選擇表列】對話框(6)彈出【選擇更改跟蹤】對話框,在該對話框里可以定義全文索引的更新方式,一 共有三種更新方式:l 【自動】:選中此單選按鈕后,當基礎數據發生更改時,全文索引將自動更新;l 【手動】:如果不希望基礎數據發生更改時自動更新全文索引,請選中此單選按 鈕。對基礎數據的更改將保留下來。不過,若要將更改應用到全文索引,必須手動 啟動或安排此進程;l 【不跟蹤更改】:如果不希望使用基礎數據的更改對全文索引進行更新,請選中 此單選按鈕。設置完畢后單擊【下一步】按鈕。圖1.8 【選擇更改跟蹤】對話框(7 )彈出如圖 1.9 所示的【選擇目錄】對話
19、框,在此可以選擇全文索引所存儲的全文 目錄。 如果沒有要選擇的全文目錄, 也可以在此新建一個全文目錄。 創建全文目錄的方法與 上節中所說的一樣。選擇完畢后單擊【下一步】按鈕。圖 1.9 【選擇目錄】對話框(8 )彈出如圖 1.10 所示的【定義填充計劃】對話框,在此可以創建全文索引和全文 目錄的填充計劃,也可以單擊【下一步】,在創建完全文索引后再創建填充計劃。圖 1.10 【定義填充計劃】對話框(9)彈出如圖 1.11 所示的【全文索引向導說明】對話框,在該對話框里可以看到全 文索引要完成的工作說明, 如果有不正確的設置, 可以單擊【上一步】 按鈕返回去重新設置, 如果完全正確則單擊【完成】按
20、鈕完成操作。圖1.11 【全文索引向導說明】對話框1.5.3 查看與修改全文索引 在創建完全文索引之后,右擊數據表,在彈出的快捷菜單里選擇【全文索引】a【屬性】 可以查看全文索引的設置,如圖 1.12 所示。圖1.12 【全文索引屬性】常規信息對話框在圖1.12 中可以看到全文索引的目前設置情況,在該對話框中可以修改是否啟用全文 索引和全文索引的更改跟蹤信息。單擊【列】標簽,打開如圖 1.13 所示的全文索引的列信 息,在此可以修改全文索引所包含的列信息。圖 1.13 【列】選項卡1.5.4 啟用和禁用全文索引 全文索引創建完畢之后,不會立即自動啟用,所以需要手動啟用全文索引。啟動全文索 引的
21、方法如下:(1)在【對象資源管理器】窗口里展開樹形目錄,定位到要啟用全文索引的數據表。(2 )右擊要啟用全文索引的數據表,在彈出的快捷菜單中選擇【全文索引】a【啟用 全文索引】。如果要禁用全文索引,也可以采取以下的方法來禁用全文索引:(1)在【對象資源管理器】窗口里展開樹形目錄,定位到要啟用全文索引的數據表。(2 )右擊要禁用全文索引的數據表,在彈出的快捷菜單中選擇【全文索引】a【禁用 全文索引】。刪除全文索引 當全文索引不再使用時,可以將其刪除,刪除方法如下:(1) 右擊要刪除全文索引的數據表,在彈出的快捷菜單里選擇【全文索引】a【刪除 全文索引】。(2) 在彈出的【刪除全文索引】對話框里單
22、擊【確定】按鈕完成操作。1.6填充全文索引 填充全文索引實質上就是更新全文索引,其目的是讓全文索引可能夠反映最新的數據表 內容。填充全文索引的方式填充全文索引一共有三種方式:l 完全填充:完全填充方式通常發生在首次填充全文目錄或全文索引時,在前一節 中所說到的“啟用全文索引”時,就已經對全文索引進行了一次完全填充,以后就可 以使用基于更改跟蹤的填充和基于增量時間戳的填充來維護全文索引。l 基于更改跟蹤方式的填充: SQL Server 會記錄設置了全文索引的數據表中修改 的行,這些記錄存儲在日志中,在某個適當時機時將這些更改填入到全文索引中。l 基于增量時間戳方式的填充:也就是增量填充,在全文
23、索引中更新上次填充之后 更新的行。增量填充要求索引表中必須有 timestamp 數據類型的字段,如果沒有 該類型的字段,則無法執行增量填充,系統將會以完全填充的方式來取代增量填充 方式進行填充。填充全文索引 由于填充全文索引有三種不同的方式,所以填充全文索引的方法也不相同。如果要以完 全填充或增量填充方式來填充全文索引, 則只要右擊全文索引所在的數據表, 在彈出的快捷 菜單里選擇【全文索引】a【啟動完全填充】或【啟動增量填充】選項即可。如圖1.1所示。圖1.14 填充全文索引 更改跟蹤方式填充全文索引分為手動和自動兩種方法,在默認情況下是自動填充,如果 要更改為手動方式, 可以右擊全文索引所
24、在的數據表, 在彈出的快捷菜單里選擇 【全文索引】 a【手動跟蹤更改】選項,如圖 1.1所示。選擇完畢之后, SQL Server 會自動跟蹤數據表中的數據更改情況,但并不將其更新到全文索引中, 只有在需要將這些更新反應到全文索引上時, 右擊全文索引所在的數據表, 在 彈出的快捷菜單里選擇【全文索引】a【應用跟蹤的更改】選項后,才會將更新反應到全文 索引上。如果在圖 1.1 所示界面里選擇了【自動跟蹤更改】選項,則由SQL Server 自動將記錄的數據表的更改更新到全文索引中,不再需要人工進行填充。如果在數據庫中有多個數據表創建了全文索引,可以使用重新生成索引目錄的方法將所有的全文索引進行完
25、全填充,其方法如下:(1)在【對象資源管理器】窗口里展開樹形目錄,定位到【服務器】a【數據庫】a【Northwi nd a存儲】a【全文目錄】。( 2 )右擊【全文目錄】,在彈出的快捷菜單中選擇【全部重新生成】選項。( 3 )在彈出的重新生成所有全文目錄對話框里單擊確定按鈕完成操作。1.6.3 定時填充全文索引在SQL Server 2005中,可以為填充全文索引設置計劃,讓系統自動定時填充全文索引, 其方法如下:(1) 右擊全文索引所在的數據表,在彈出的快捷菜單里選擇全文索引】a【屬性 來查看全文索引的設置,如圖 1.12 所示,在該圖中選擇計劃選項。(2) 彈出如圖 1.15 所示全文索引
26、填充計劃對話框,在該對話框中單擊新建按鈕。圖1.15 全文索引填充計劃對話框(3) 彈出如圖 1.16 所示的新建全文索引表計劃對話框。l 在名稱文本框里可以輸入該計劃名稱。l 在計劃類型下拉列表框里,可選項有“ SQL Server 代理啟動時自動啟動”:也就是在SQL Server 代理啟動時自動填充全文索引;“ CPU 空閑時啟動”:也就是當 CPU 空閑時填 充全文索引;“執行一次”:在指定時間時填充全文索引,只填充一次;“重復執行”:可以設定多次填充全文索引的方式。l 如果選中已啟用復選框,則啟用該填充全文索引的計劃。l 在執行一次 區域里, 可以設置計劃類型為 “執行一次” 的執行
27、時間, 在到達該時間時, 自動填充全文索引。l 在頻率區域里,可以設置計劃類型為“重復執行”的執行頻率。在執行下拉列表 框 里可選擇項為“每天”、“每周”和“每月”,分別用于指定每天、每周和每月執行填充計 劃的頻率。l 在持續時間區域里可以設置該計劃的開始日期與結束日期,其中結束日期可以設置為 無結束日期,也就是永遠執行下去。圖1.16 新建全文索引表計劃對話框(4) 設置完畢后單擊確定按鈕完成計劃設計,返回如圖1.17 所示對話框。圖1.17 全文索引填充計劃對話框(5) 在如圖 1.17 所示對話框里,可以選擇全文索引填充計劃所要執行的填充方式, 設置完畢后單擊確定按鈕完成操作。注意:如果
28、單擊確定按鈕之后出現如圖 1.18 所示的失敗對話框,請先安裝 SQLServer 2005 SP1 (下載地址為: /details.aspx?displaylang=zh-cn&Family ID=cb6c71ea-d649-47ff-9176-e7cac58fd4bc),然后再安裝版本為的 SQLServer 2005 累積修補程序包(下載地址為: /918222/zh-cn)。圖1.18 添加計劃失敗對話框使用類似的方法也可以定時填充全文目錄: (1)右擊全文目錄名,在彈出的快捷菜單里選擇【屬性】選項。(2 )在彈出的如圖 1.4 所示的【全文目錄屬性】對話框里選擇【填充計劃】
29、選項。(3 )彈出與 1-15 所示的填充計劃對話框,其添加計劃的步驟與創建全文索引的填充 計劃幾乎相同,在此就不再贅述了。1.7使用全文搜索查詢 設置完全文索引并填充完畢之后,就可以通過全文搜索來查詢數據了。使用全文搜索來 查詢數據所用到的 T-SQL 語句也是 SELECT 語句,只是在設置查詢條件時和前面所說過的 SELECT語句的查詢條件設置有些不同。在T-SQL語言中,可以在SELECT語句的WHERE子句里設置全文搜索的查詢條件,也可以在 FROM 子句里設置查詢條件,此時將返回結果作 為FROM 子句中的表格來使用。如果要在 WHERE子句里設置全文搜索的查詢條件,可以使用CON
30、TAINS 和FREETEXT兩個謂詞;如果要在 FROM 子句里設置全文搜索的查詢條件,可以使用 CONTAINSTABLE 和 FREETEXTTABLE 兩個行集值函數。使用 CONTAINS搜索CONTAINS 用于SELECT語句的WHERE子句中,可以支持使用復雜的語法在字符列中 搜索詞、子句、衍生字或位置相近的字符串。使用 CONTAINS 謂詞可以在數據表中使用以 下五種形式搜索數據:l 簡單詞:也就是可以搜索一個或多個特定的詞或短語。詞可以包括一個或多個字 符,中間沒有空格或標點。短語可以是由空格分隔的多個詞組成,但詞之間可以有 標點也可以沒標點。l 派生詞:也就是可以搜索特
31、定詞的變形,一般是指英語中的單詞,其有過去式、 現在式、將來式等不同的形式。派生詞是指可以包含該單詞的所有其他形式。l 前綴詞:也就是可以搜索指定文本開頭的詞或短語。一般也用于英文單詞中,可 以指定一個英文單詞的前幾個字母來作為搜索條件。l 加權詞:也就是可以給多個搜索條件加上權值,加權值越高的記錄排在越前面。l 鄰近詞:也就是可以搜索與另一個詞或短語相鄰近的詞或短語。 下面分別介紹如何使用這些不同的方式來搜索數據。CONTAINS 的語法CONTAINS 的語法代碼如下:CONTAINS( column_name | (column_list) | * - 列名, '< con
32、tains_search_condition >' - 搜索語句 , LANGUAGE language_term - 發出查詢時所用的語言)< contains_search_condition > := < simple_term > - 簡單詞搜索方式| < prefix_term > - 前綴詞搜索方式| < generation_term > - 派生詞搜索方式| < proximity_term > -鄰近詞搜索方式| < weighted_term > - 權重詞搜索方式| ( < con
33、tains_search_condition > ) -搜索語句 AND | & | AND NOT | & ! | OR | | -條件< contains_search_condition > .n -搜索語句< simple_term > := - 簡單詞搜索方式語法塊word | " phrase "< prefix term > := - 前綴詞搜索方式語法塊 "word * " | "phrase *" < generation_term > := -派
34、生詞搜索方式語法塊FORMSOF ( INFLECTIONAL - 指定詞干分析器| THESAURUS , - 指定同義詞庫< simple_term > ,.n )< proximity_term > := -鄰近詞搜索方式語法塊 < simple_term > | < prefix_term > NEAR | < simple_term > | < prefix_term > .n < weighted_term > := -權重詞搜索方式語法塊ISABOUT( < simple_term >
35、| < prefix_term >| < generation_term >| < proximity_term > WEIGHT ( weight_value ) - 指定權重 ,.n ) 其中常用的參數為:l column_name :字段名l column_list :字段名列表l * :所有字段l LANGUAGE language_term :用于設置查詢時所用的語言。例如在 image 字段 里可能會存儲了多種語言的文檔,該參數允許用戶指定搜索使用的語言,從而提高 匹配率。l INFLECTIONAL :用于指定使用與語言相關的詞干分析器。詞干分
36、析器用于根據 每種具體語言的判斷詞干。l THESAURUS :用于指定同義詞庫。簡單詞的搜索方式 簡單詞的搜索方式就是搜索一個或多個特定的詞或短語。 例一、搜索文章表的標題中含有“上海”的記錄,其代碼如下: SELECT * FROM 文章WHERE CONTAINS( 標題,'上海 ') 例二、搜索文章表的內容中含有“上海”或“廣州”的記錄,其代碼如下: SELECT * FROM 文章WHERE CONTAINS( 內容,' "上海 " OR "廣州"') 注意例二與例一的不同, 在 CONTAINS 謂詞的第二個參
37、數里, 將“”上海” OR “廣州” ” 做為一個字符串傳遞給 CONTAINS 。使用以下代碼將會出錯:SELECT * FROM 文章WHERE CONTAINS( 內容 ,' 上海 OR '廣州 ') 派生詞的搜索方式派生詞的搜索方式主要用在英文當中,因為英文單詞中含有現在式、過去式、將來式、 單復數等不同的形式, 使派生詞的搜索方式可以將字段中包括該單詞的所有形式的記錄都搜 索出來。 例如使用派生詞方式搜索包含單詞download 的記錄, 則會把包含 download 、downloading 等派生詞的記錄都搜索出來。例三、搜索文章表中內容中含有 downl
38、oad 及其派生詞的記錄,其代碼如下:SELECT * FROM 文章WHERE CONTAINS(內容,'FORMSOF(INFLEC TIONAL,download)')注意CONTAINS 謂詞的不同處,運行結果如圖1.19所示。圖1.19 運行結果在圖 1.19 中可以看到只查詢到一條記錄,而并未將 download 的派生詞也搜索進來, 這是因為從一開始設置全文索引時, 所采用的是數據庫默認的斷字符語言, 即簡體中文, 而 在中文中沒有派生詞, 所以使用派生詞方式搜索數據是起不到其作用的。 此時可以通過修改 全文索引的斷字符語言來達到搜索效果。修改方式如下:(1) 右
39、擊全文索引所在的數據表,在彈出的快捷菜單中選擇【全文索引】a【屬性】彈出如圖 1.12 所示【全文索引屬性】對話框。(2) 在【全文索引屬性】對話框里選擇【列】選項,彈出如圖1.20 所示對話框,修改【內容】字段的【斷字符語言】為“English”。圖1.20 修改斷字符語言( 3 )單擊【確定】按鈕完成操作。再次運行例三中的代碼,其運行結果如圖 1.21 所示。圖 1.21 正確的運行結果前綴詞的搜索方式前綴詞的搜索方式主要也是用在搜索英文中,例如搜索以“do ”開頭的單詞,則可以將 doctor 、document 、download 等單詞都搜索出來。例四、搜索文章表中內容中含有“do
40、”開頭的單詞的記錄,其代碼如下:SELECT * FROM 文章WHERE CONTAINS( 內容,' "do*" ')此方式有點類似與 lik e 子句的通配符方式,但只能使用“ *”,并且只能放在英文字母之 后,如“ *do ”、“ *do* ”都是錯誤的表達方式。加權詞的搜索方式當以多個字符串作為搜索條件搜索記錄時,可以為不同的字符串加上一個加權值,這個 加權值是介于 0 和 1 之間的數值,加權值越高的記錄排在越前面。 例五、搜索文章表中內容中含有“ download ”、“上海”、“山西”的記錄,并為不同的 條件加上加權值,其代碼如下:SELEC
41、T * 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 語句的返回結果集里,并沒有按加權值的大小來排序,因為 WEIG HT 不影響 C
42、ONTAINS 查詢的結果,只會影響 CONTAINSTABLE 查詢中的排序。 說明:使用本例時最好將“內容”字段的“斷字符語言”改回簡體中文,否則會影響中文 的搜索結果。鄰近詞的搜索方式 鄰近詞的搜索方式可以搜索記錄中位置相近的兩個字符,例如要搜索文章標題為“教育 部擬取消教師資格終身制實行定期認證” 的文章, 完整的標題名記不清楚了,只記得“教育 部”和“資格”,則可以以鄰近詞的搜索方式進行查詢。 例六、搜索文章內容中與教育部表示相關的記錄,其代碼如下: SELECT * FROM 文章WHERE CONTAINS( 內容,' "教育部 " NEAR &quo
43、t;表示 "')使用 FREETEXT 搜索FREETEXT 搜索方式與 CONTAINS 搜索方式相比,其搜索結果表現都十分不精確,因為FREETEXT的搜索方式是將一個句子中的每個單字拆分開進行搜索的。例如:如果使用CONTAINS 搜索方式搜索條件為“教育部”的記錄,那么搜索出來的將是記錄里包含“教育 部”三個字符串的記錄。如果使用 FREETEXT 搜索方式搜索條件為“教育部”的記錄,那么搜 索出來的將是記錄里包含 “教”或“育”或“部”的記錄。 如果搜索的是英文字符串 “SQL Server 2005”,則拆分為“ SQL”、“ Server ”和“ 2005 ”來
44、進行搜索,只要滿足其中一個條件都算 搜索成功。FREETEXT 的語法代碼為:FREETEXT ( column_name | (column_list) | * , 'freetext_string' , LANGUAGE language_term )其中:l column_name :為字段名。l column_list :為字段列表。l * :代碼所有字段。l 'freetext_string' :搜索的字符串。l LANGUAGE language_term :用于單詞斷字、詞干分析、同義詞庫查詢以及干擾 詞刪除的特定的語言。FREETEXT 的搜索方
45、式沒有 CONTAINS 復雜,下面舉例說明:例七、用CONTAINS 和FREETEXT兩種方式來搜索“教育部”字符串,其代碼如下:SELECT * FROM 文章WHERE FREETEXT(內容,'教育部')SELECT * FROM 文章WHERE CONTAINS ( 內容,'教育部 ')其運行結果如圖 1.22 所示,使用 CONTAINS 查詢結果要比使用 FREETEXT 的查詢結 果記錄數要多得多。圖1.22 CONTAINS 和FREETEXT的查詢結果使用 CONTAINSTABLE搜索CONTAINSTABLE 函數與 CONTAINS
46、謂詞類似,其可以返回符合條件的多條記錄,但 是返回的記錄是作為數據表出現在 SELECT 語句的 FROM 子句中。這個數據表里只包含兩 個1.6字段:一個字段名為“ KEY”,該字段顯示的是全文索引的唯一索引鍵的內容,也就是圖 所示界面中所創建的索引列;另一個字段名為“ RANK” ,該字段是排名值字段,其排名值 是由系統依查詢符合的程度自動生成的。 CONTAINSTABLE 的語法代碼為:CONTAINSTABLE ( table , column_name | (column_list ) | * , ' < contains_searc h_condition >
47、 ' , LANGUAGE language_term ,top_n_by_rank )< contains_search_condition > := < simple_term >| < prefix_term >| < generation_term >| < proximity_term >| < weighted_term >| ( < contains_search_condition > ) AND | & | AND NOT | &! | OR | | < cont
48、ains_search_condition > .n < simple_term > := word | " phrase "< prefix term > := "word * " | "phrase *" < generation_term > :=FORMSOF ( INFLECTIONAL | THESAURUS , < simple_term > ,.n )< proximity_term > := < simple_term > | < p
49、refix_term > NEAR | < simple_term > | < prefix_term > .n < weighted_term > :=ISABOUT( < simple_term >| < prefix_term >| < generation_term >| < proximity_term > WEIGHT ( weight_value ) ,.n )從以上代碼可以看得出, CONTAINSTABLE 與 CONTAINS 的搜索條件一樣分為五類, 其形式也幾乎一樣,只是增加了 t
50、able 和 top_n_by_rank 兩個參數:l table :全文索引所在的數據表名。l top_n_by_rank :返回的記錄數,相當于 SELECT 語句中的 top n 。 下面舉幾個例子說明 CONTAINSTABLE 與 CONTAINS 在用法上不同的地方。 例八、查看文章表中內容含有“教育部”的記錄的編號,其代碼如下: SELECT * FROMCONTAINSTABLE( 文章 ,內容 ,'教育部 ') as table1在本例中可以看到, CONTAINSTABLE 返回的結果是作為數據表的形式出現在 FROM 子 句中。其運行結果如圖 1.23 所
51、示,查詢的結果也就是 CONTAINSTABLE 返回的數據表的 結果,只有兩個字段。圖 1.23 例八的運行結果例九、查看文章表中內容含有 “教育部” 和“表示” 的前十條記錄, 并按查詢符合程度排序, 其代碼如下:SELECT * FROM 文章 JOINCONTAINSTABLE( 文章,內容,' "教育部 " NEAR "表示" ',10) as table1ON 文章 .編號 = table1.KEYORDER BY table1.RANK DESC其運行結果如圖 1.24 所示,在本例中,將 CONTAINSTABLE 函數返
52、回的數據表與文章表 JOIN 起來進行聯合查詢,就好像一個真實的數據表一樣。由于 KEY 是關鍵字,所以 在本例當中用方括號將 KEY 括起來。圖 1.24 例九的運行結果 例十、搜索文章表中內容中含有“ download ”、“上海”、“山西”的記錄,并為不同的 條件加上加權值,然后按權值排序。其代碼如下:SELECT * FROM 文章 JOINCONTAINSTABLE( 文章 ,內容 ,'ISABOUT ("download" weight(0.9),"上海" weight(0.6),"山西" weight(0.1)&
53、#39;) AS TABLE1ON 文章 .編號 = TABLE1.KEYORDER BY TABLE1.RANK DESC其運行結果如圖 1.25所示, RANK 字段是依符合程度生成的數據再加上權值后的結果。圖 1.25 例十的運行結果使用 FREETEXTTABLE 搜索與CONTAINSTABLE 樣,FREETEXTTABLE函數也是返回擁有 KEY和RANK兩個字段 的表,該表可以和數據庫中的數據表一樣使用。 FREETEXTTABLE 的語法代碼如下所示: FREETEXTTABLE (table , column_name | (column_list) | * , '
54、freetext_string' ,LANGUAGE language_term ,top_n_by_rank ) 由以上代碼可以看出 FREETEXTTABLE 函數與 FREETEXT 謂詞的語法代碼相似,只是多 了 table 和 top_n_by_rank 兩個參數。例十一、查看文章表中“內容”字段含有“教育部”的前十條記錄,其代碼如下:SELECT 文章內容,TABLE1.* FROM 文章 JOINFREETEXTTABLE(文章,內容,'教育部',8) AS TABLE1ON 文章編號=TABLE1JKEY運行結果如圖1.26所示:圖1.26例一的運行結果
55、搜索 image 字段在SQL Server 2005的image類型的字段里,不僅僅是可以存儲圖形文件,還可以存 儲如可執行文件、音樂文件、文本文件等眾多文件類型。 SQL Server 2005 支持對存儲在 im age 類型的字段里的一些文件的內容進行全文搜索,但在創建全文索引時必須指明存儲在image 字段里的文件的類型。如圖 1.7 所示。SQL Server 2005 支持對存儲在 image 中的純文本文件、網頁文件、 Word 文件、 Excel 文件和 PowerPoint 文件的內容進行查詢,其擴展名字段必須分別為txt 、htm 、doc 、xls 和ppt 。全文索引
56、創建完畢后,對 image 字段里的文件內容進行查詢的方法與其他字段的查詢 方法是一樣的: 例十二、查詢存儲在文章表的文件字段里的內容包含“數據庫”的文件,其代碼如下:SELECT 編號,標題,文件,擴展名 FROM 文章WHERE CONTAINS( 文件,'數據庫 ')1.82005新增:與全文索引相關的T-SQL語句在 SQL Server 2005 以前的版本中,創建與管理全文目錄、全文索引主要是使用存儲過 程來完成。從 SQL Server 2005 開始新增加了一些與全文索引相關的 T-SQL 語句,可以用 來創建與管理全文目錄和全文索引。創建全文目錄創建全文目錄的
57、 T-SQL 語句為:CREATE FULLTEXT CATALOG catalog_nameON FILEGROUP filegroup IN PATH 'rootpath'WITH <catalog_option>AS DEFAULTAUTHORIZATION owner_name <catalog_option>:=ACCENT_SENSITIVITY = ON|OFF 其中參數說明如下:l catalog_name :全文目錄名稱。l ON FILEGROUP filegroup :包含全文目錄的文件組名。l IN PATH 'rootp
58、ath' :全文目錄的路徑。l AS DEFAULT :指定該全文目錄為默認目錄。l AUTHORIZATION owner_name :將全文目錄的所有者設為數據庫用戶名或角色 的名稱。l ACCENT_SENSITIVITY :設置該全文目錄的全文索引是否區分重音。例十三、 在 Northwind 數據庫中創建一個名為 “TSQL 全文目錄” 全文目錄, 其代碼如下: CREATE FULLTEXT CATALOG TSQL 全文目錄ON FILEGROUP PRIMARYIN PATH 'E:bookSQL Server 2005 大全 數據庫 第十四章 運行后數據庫 'AS DEFAULT1.8.2 更改全文目錄屬性 創建完全文目錄之后,如果發
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 小學趣配音活動方案
- 少年音樂比拼活動方案
- 小班防疫教育活動方案
- 小學預防感冒活動方案
- 幫扶支教活動方案
- 市場推廣活動方案
- 小班元旦閱讀節活動方案
- 小小畫筆贊祖國活動方案
- 小學虎年迎新年活動方案
- 小組獎勵活動方案
- 譯林小學英語5B教材分析
- 江蘇省常州市2024屆高一數學下學期期末質量調研試題(含解析)
- 新標準大學英語(第二版)綜合教程2 Unit 1 A篇練習答案及課文翻譯
- 冀教版英語小升初模擬試卷
- 食品用塑料包裝容器工具等制品生產許可審查細則
- 物流供應商運作考評標準
- 格賓擋墻結構設計計算書
- 招標投標活動異議和投訴處理工作規范
- 八年級上冊物理教案全冊
- 《ROHS知識培訓》PPT課件.ppt
- (完整版)中國科大操作系統復習題解
評論
0/150
提交評論