一、如何在SQL中啟用全文檢索索引功能
1、證全文檢索索引服務是否安裝
通過儲存過程FULLTEXTSERVICEPROPERTY(返回有關全文檢索服務層級屬性的資訊)來驗證搜尋服務(全文組件)是否安裝。如Select fulltextserviceproperty (‘IsFullTextInstalled’):返回1表示已安裝全文組件;返回0表示未安裝全文組件;返回Null表示輸入無效或發生錯誤。
2、啟動全文檢索索引服務(MircoSoft Search)
3、開啟資料庫全文索引的支援
為全文索引啟用資料庫:
Use Northwind
Exec sp_fulltext_database ‘enable’
從資料庫中刪除所有目錄:
Use Northwind
Exec sp_fulltext_database ‘disable’
二、建立全文檢索目錄
1、建立全文檢索目錄
Use Northwind
Exec sp_fulltext_catalog 'ft_ Catalog ', 'create'
2、重建全文檢索目錄
Use Northwind
Exec sp_fulltext_catalog 'ft_ Catalog ', ' rebulid'
3、啟動全文檢索目錄的填充
Use Northwind
Exec sp_fulltext_catalog 'ft_ Catalog ', 'start_full'
4、停止全文檢索目錄的填充
Use Northwind
Exec sp_fulltext_catalog 'ft_ Catalog ', 'stop'
5、刪除全文檢索目錄
Use Northwind
PK_Products
Exec sp_fulltext_catalog 'ft_ Catalog ', 'drop'
三、為表建立全文索引資料元
1、建立的唯一索引
Use Northwind
Exec sp_fulltext_table 'Products','create', 'ft_ Catalog', ' PK_Products '
2、設定全文索引列名
Use Northwind
Exec sp_fulltext_table 'Products','create', 'ft_ Catalog', ' PK_Products '
3、設定全文索引列名
Use Northwind
Exec sp_fulltext_column ' Products ', ProductName', 'add'
Go
Exec sp_fulltext_column ' Products ', QuantityPerUnit', 'add'
Go
4、啟用全文索引
Use Northwind
Exec sp_fulltext_table 'Products','activate
5、填充全文索引目錄
Use Northwind
Exec sp_fulltext_catalog 'ft_ Catalog ', 'start_full'
四、使用Transact-SQL進行全文檢索索引,我們使用CONTAINS、FREETEXT等謂詞
1、檢索ProductName中,即包含b又包含c的所有列
Use Northwind
SELECT *
FROM Products
WHERE CONTAINS(ProductName, '"c*" and "b*" ')
2、檢索ProductName中,即包含chai chang tofu之一的所有列
Use Northwind
SELECT *
FROM Products
WHERE FREETEXT(ProductName, 'chai chang tofu ')
五、全文檢索查詢有關的系統預存程序
(1)啟動資料庫的全文處理功能(sp_fulltext_datebase);
(2)建立全文檢索目錄(sp_fulltext_catalog);
(3)在全文檢索目錄中註冊需要全文索引的表(sp_fulltext_table);
(4)指出表中需要全文檢索索引的列名(sp_fulltext_column)
(5)為表建立全文索引(sp_fulltext_table);
(6)填充全文索引(sp_fulltext_catalog)。
全文檢索查詢支援
Microsoft SQL Server 2000 在接收帶全文構造的 Transact-SQL 陳述式時,使用全文提供者從 Microsoft 搜尋服務檢索所需資訊。全文構造是 CONTAINS 或 FREETEXT 謂詞,或者是 CONTAINSTABLE 或 FREETEXTTABLE 行集合函式。如果不知道包含搜尋條件的列,全文構造可以在全文索引中引用多列。該進程的流程如所示。
這一進程涉及的步驟包括:
應用程式給 SQL Server 執行個體發送帶全文構造的 Transact-SQL 陳述式。
SQL Server 關聯式引擎通過查詢系統資料表驗證全文構造,確定全文索引是否覆蓋列引用。關聯式引擎將每個 SQL 陳述式簡化為一系列行集操作,並使用 OLE DB 將這些操作傳遞給基礎組件,通常是儲存引擎。關聯式引擎通過全文提供者而不是儲存引擎,將任何全文構造轉換成對行集的請求。請求的行集是滿足搜尋條件和等級的鍵集,而這個等級表示每個鍵的資料滿足搜尋條件的程度。向全文提供者發送的行集請求命令包括全文檢索索引條件。
全文提供者驗證請求並將搜尋條件更改為由Microsoft 搜尋服務的查詢支援組件使用的形式。將請求發送到搜尋服務。
查詢支援組件使用搜尋引擎組件從全文索引析取所請求的資料。然後以行集的形式將這些資料傳遞迴全文提供者。
全文提供者將這個行集返回給關聯式引擎。
關聯式引擎將它從儲存引擎和全文提供者收到的所有行集進行組合,以產生發送回用戶端的最終結果集。
全文檢索目錄和索引
Microsoft SQL Server 2000 全文索引為在字串資料中進行複雜的詞搜尋提供有效支援。全文索引儲存關於重要詞和這些詞在特定列中的位置的資訊。全文檢索查詢利用這些資訊,可快速搜尋包含具體某個詞或一組詞的行。
全文索引包含在全文檢索目錄中。每個資料庫可以包含一個或多個全文檢索目錄。一個目錄不能屬於多個資料庫,而每個目錄可以包含一個或多個表的全文索引。一個表只能有一個全文索引,因此每個有全文索引的表只屬於一個全文檢索目錄。
全文檢索目錄和索引不儲存在它們所屬的資料庫中。目錄和索引由 Microsoft 搜尋服務分開管理。
全文索引必須在基表上定義,而不能在視圖、系統資料表或暫存資料表上定義。 全文索引的定義包括:
能唯一標識表中各行的列(主鍵或候選索引鍵),而且不允許 NULL 值。
索引所覆蓋的一個或多個字串列。
全文索引由索引值填充。每個鍵的項提供與該鍵相關聯的重要詞(非搜尋字或終止詞除外)、它們所在的列和它們在列中的位置等有關資訊。
格式化文本字串(如 Microsoft Word 文檔檔案或 HTML 檔案)不能儲存在字串或 Unicode 列中,因為這些檔案中的許多位元組包含不構成有效字元的資料結構。資料庫應用程式可能仍需要訪問這些資料並對其應用全文檢索索引。因為 image 列並不要求每一位元組都構成一個有效字元,所以許多網站將這類資料存放區在 image 列中。SQL Server 2000 引入了對儲存在 image 列中的這些類型的資料執行全文檢索索引的能力。SQL Server 2000 提供篩選,可從 Microsoft Office 檔案(.doc、.xls 和 .ppt 檔案)、文字檔(.txt 檔案)及 HTML 檔案(.htm 檔案)中析取文本化資料。設計表時除包括儲存資料的 image 列外,還需包括繫結資料行來儲存儲存在 image 列中的資料格式的副檔名。可以建立引用 image 列和繫結資料行的全文索引,以便在儲存於 image 列中的文本化資訊上啟用全文檢索索引。SQL Server 2000 全文檢索索引引擎使用繫結資料行中的副檔名資訊,選擇從列中析取文本化資料的合適的篩選。
全文索引是用於執行兩個 Transact-SQL 謂詞的組件,以便根據全文檢索索引條件對行進行測試:
CONTAINS
FREETEXT
Transact-SQL 還包含兩個返回符合全文檢索索引條件的行集的函數:
CONTAINSTABLE
FREETEXTTABLE
SQL Server 在內部將搜尋條件發送給 Microsoft 搜尋服務。Microsoft 搜尋服務尋找所有符合全文檢索索引條件的鍵並將它們返回給 SQL Server。SQL Server 隨後使用鍵的列表來確定表中要處理的行。
全文索引
對 Microsoft SQL Server 2000 資料的全文支援涉及兩個功能:對字元資料發出查詢的能力和建立及維護基礎索引以簡化這些查詢的能力。
全文索引在許多地方與普通的 SQL 索引不同。
普通 SQL 索引全文索引儲存時受定義它們所在的資料庫的控制。儲存在檔案系統中,但通過資料庫管理。每個表允許有若干個普通索引。每個表只允許有一個全文索引。當對作為其基礎的資料進行插入、更新或刪除時,它們自動更新。將資料添加到全文索引稱為填充,全文索引可通過調度或特定請求來請求,也可以在添加新資料時自動發生。不分組。在同一個資料庫內分組為一個或多個全文檢索目錄。使用 SQL Server 企業管理器、嚮導或 Transact-SQL 陳述式建立和除去。使用 SQL Server 企業管理器、嚮導或預存程序建立、管理和除去。
這些差異使大量管理工作變得不可缺少。全文管理是在幾個層次上實施的:
伺服器
可以對伺服器範圍的某些屬性(如 resource_usage)加以設定,以便增加或減少全文檢索服務所使用的系統資源數量。
說明 全文引擎作為名為 Microsoft 搜尋的服務在 Microsoft Windows NT Server 和 Microsoft Windows 2000 Server 上運行。對於 Microsoft SQL Server 個人版,Microsoft 搜尋服務不可用。儘管這意味著 Microsoft 搜尋服務既未安裝在 Microsoft Windows 95/98 上,也未安裝在 Windows NT 工作站或 Windows 2000 Professional 用戶端上,但這些用戶端在串連到 SQL Server 標準版安裝或企業版執行個體時可以使用這項服務。
資料庫
必須啟用資料庫才能使用全文檢索服務。可以在已啟用的資料庫中建立和除去一個或多個全文檢索目錄的中繼資料。
全文檢索目錄
全文檢索目錄包含資料庫中的全文索引。每個目錄可以用於資料庫內的一個或多個表的索引需求。該目錄中的索引是使用這裡介紹的管理功能來填充的。(全文檢索目錄必須駐留在與 SQL Server 執行個體相關聯的本地硬碟上。不支援可移動的磁碟機、磁碟片和網路磁碟機)。在每個伺服器上最多可建立 256 個全文檢索目錄。
說明 Windows NT 容錯移轉叢集環境完全支援全文索引。有關更多資訊,請參見在容錯移轉叢集中運行全文檢索查詢。
表
首先,必須為全文支援啟用表。然後,為與該表相關聯的全文索引建立中繼資料(如表名及其全文檢索目錄)。表啟用後,可以用為全文支援而啟用的列中的資料填充它。如果表的全文定義被更改(例如,添加一個也將為全文檢索索引而索引的新列),則必須重新填充相關的全文檢索目錄以使全文索引與新的全文定義同步。
列
可以從非活動的註冊表中添加或除去支援全文檢索查詢的列。
在所有這些層級上,可使用工具檢索中繼資料和狀態資訊。
和常規 SQL 索引一樣,當在相關表中修改資料時,可自動更新全文索引。或者,也可以適當的間隔手工重新填充全文索引。這種重寫可能既耗時又大量佔用資源,因此,在資料庫活動較少時,這通常是在後台啟動並執行非同步進程。
應將具有相同更新特性的表(如更改少的與更改多的,或在一天的特定時段內頻繁更改的表)組合在一起,並分配給相同的全文檢索目錄。通過以此方法設定全文檢索目錄填充調度,使得全文索引和表保持同步,且在資料庫活動較多時不對資料庫伺服器的資源使用產生負面影響。
為全文檢索目錄中的表安排全文索引的位置是非常重要的。在為全文檢索目錄指定表時,應該注意下列基本原則:
始終選擇可用於全文唯一鍵的最小唯一索引。(4 個位元組且基於整數的索引是最佳的。)這將顯著減少檔案系統中 Microsoft 搜尋服務所需要的資源。如果主鍵很大(超過 100 位元組),可以考慮選擇表中其它唯一索引(或建立另一個唯一索引)作為全文唯一鍵。否則,如果全文唯一鍵的大小達到允許的上限(450 位元組),全文填充將無法繼續進行。
如果進行索引的表有成千上萬行,請將該表指定給其自己的全文檢索目錄。
應該考慮對其進行全文索引的表中發生的更改數以及表的行數。如果要更改的總行數,加上上次全文填充期間表中出現的行數達到成千上萬行,請將該表指定給其自己的全文檢索目錄。