共用方式為


建立及管理全文檢索索引

適用於:SQL ServerAzure SQL 資料庫Azure SQL 受控執行個體

本文描述如何建立、填入和管理 SQL Server 中的全文檢索索引。

建立全文檢索目錄

您需要有全文目錄,才能建立全文索引。 目錄是一或多個全文檢索索引的虛擬容器。 如需詳細資訊,請參閱建立及管理全文檢索目錄

建立、改變或卸除全文檢索索引

填入全文索引

建立與維護全文索引的過程稱為「填充」(也稱為「爬行索引」)。 全文索引填充有三種類型:

  • 全體人口
  • 基於變更追蹤的人口
  • 根據時間戳記的增量人口。

如需詳細資訊,請參閱 填充全文索引

檢視全文檢索索引的屬性

使用 Transact-SQL 檢視全文檢索索引的屬性

目錄或動態管理檢視 描述
sys.fulltext_index_catalog_usages (Transact-SQL) 針對每個全文目錄與全文索引的關聯,各傳回一個資料列。
sys.fulltext_index_columns (Transact-SQL) 每個屬於全文檢索索引一部分的資料行各自擁有一個資料列。
sys.fulltext_index_fragments (Transact-SQL) 全文檢索索引會使用稱為「全文檢索索引片段」的內部資料表來儲存反向索引資料。 此檢視表可用來查詢有關這些片段的中繼資料, 此檢視表針對每一個資料表內包含全文檢索索引的每一個全文檢索索引片段各包含一個資料列。
sys.fulltext_indexes (Transact-SQL) 針對表格式物件的每個全文檢索索引,各包含一個資料列。
sys.dm_fts_index_keywords (Transact-SQL) 針對指定的資料表傳回全文索引內容的相關資訊。
sys.dm_fts_index_keywords_by_document (Transact-SQL) 傳回有關指定資料表之全文檢索索引中文件層級內容的資訊。 給定的關鍵字可能會出現在許多份文件中。
sys.dm_fts_index_population (Transact-SQL) 返回有關當前正在進行的全文索引資料填充的資訊。

使用 SQL Server Management Studio 檢視全文檢索索引的屬性

注意

若要檢視 Azure SQL 資料庫的全文檢索索引屬性,請使用 Transact-SQL

  1. 在 SQL Server Management Studio 的 [物件總管] 中展開伺服器。

  2. 展開 資料庫,然後展開包含全文字索引的資料庫。

  3. 展開 資料表

  4. 以滑鼠右鍵按一下已定義全文檢索索引的資料表,選取 [全文檢索索引],然後選取 [全文檢索索引] 操作功能表上的 [屬性]。 這樣就會開啟 [全文檢索索引屬性] 對話方塊。

  5. [選取頁面] 窗格中,您可以選取下列任何頁面:

    頁面 描述
    一般 顯示全文檢索索引的基本屬性。 這些屬性包括一些可修改的屬性和許多無法變更的屬性,例如資料庫名稱、資料表名稱,以及全文檢索索引鍵資料行的名稱。 可修改的屬性包括:

    全文檢索索引停用詞表

    全文檢索索引已啟用

    變更追蹤

    搜尋屬性清單
    欄位 顯示可用於全文檢索索引的資料表資料行。 系統會針對選取的資料行建立全文檢索索引。 您可以選取任意數目的可用資料行,以便包含在全文檢索索引中。 如需詳細資訊,請參閱填充全文檢索索引
    排程 您可以使用這個頁面來建立或管理 SQL Server Agent 作業的排程,以便針對全文檢索索引集合啟動增量資料表填充。 如需詳細資訊,請參閱填入全文檢索索引

    注意:在您結束 [全文檢索索引屬性] 對話方塊之後,任何新建立的排程都會與 SQL Server Agent 作業 (在 database_name.table_name 上啟動增量資料表填充) 建立關聯。
  6. 選取 [確定],儲存任何變更並結束 [全文檢索索引屬性] 對話方塊。

檢視索引資料表和資料行的屬性

您可以使用許多 Transact-SQL 函式 (例如 OBJECTPROPERTYEX) 以取得各種全文檢索索引屬性的值。 此資訊對於管理及疑難排解全文檢索有助益。

下表列出與索引資料表和資料行相關的全文檢索屬性,及其相關的 Transact-SQL 函式。

屬性 描述 函式
FullTextTypeColumn 在資料表中,用來保存資料行文件類型資訊的 TYPE COLUMN。 COLUMNPROPERTY
IsFulltextIndexed 欄是否已啟用全文檢索。 COLUMNPROPERTY
IsFulltextKey 索引是否為資料表的全文索引鍵。 INDEXPROPERTY
TableFulltextBackgroundUpdateIndexOn 資料表是否具有背景更新的全文檢索索引。 OBJECTPROPERTYEX
TableFulltextCatalogId 資料表的全文索引資料所位於的全文目錄識別碼。 OBJECTPROPERTYEX
表格全文變更追蹤開啟 資料表是否已啟用全文變更追蹤功能。 OBJECTPROPERTYEX
全文文件處理表 全文檢索索引啟動之後所處理的資料列數。 OBJECTPROPERTYEX
TableFulltextFailCount 未被全文檢索編製索引的資料列數。 OBJECTPROPERTYEX
TableFulltextItemCount 已成功全文檢索索引的資料列數。 OBJECTPROPERTYEX
TableFulltextKeyColumn 全文檢索唯一索引鍵資料行的資料行識別碼。 OBJECTPROPERTYEX
TableFullTextMergeStatus 具有全文檢索索引的資料表目前是否正在合併。 OBJECTPROPERTYEX
TableFulltextPendingChanges 待處理的變更追蹤項目數量。 OBJECTPROPERTYEX
TableFulltextPopulateStatus 全文表格的母體狀態描述。 OBJECTPROPERTYEX
TableHasActiveFulltextIndex 資料表是否有一個啟用的全文檢索索引。 OBJECTPROPERTYEX

取得全文索引鍵資料行的相關資訊

一般而言,CONTAINSTABLE 或 FREETEXTTABLE 資料列集值函數的結果必須與基底資料表聯結。 在這種情況下,您必須知道主鍵資料行名稱。 您可以查詢給定的唯一索引是否用作全文鍵,並取得全文鍵資料行的識別符號。

判斷給定的唯一索引是否用作全文索引鍵資料行使用

使用 SELECT 陳述式來呼叫 INDEXPROPERTY 函數。 在函式呼叫中,使用 OBJECT_ID 函式,將資料表的名稱 (table_name) 轉換成資料表識別碼、指定資料表之唯一索引的名稱,以及指定 IsFulltextKey 索引屬性,如下所示:

SELECT INDEXPROPERTY(OBJECT_ID('table_name'), 'index_name',  'IsFulltextKey');

如果索引是用來強制全文檢索索引鍵資料行的唯一性,這個陳述式就會傳回 1。如果不是,便傳回 0。

範例

下列範例會查詢是否使用 PK_Document_DocumentNode 索引來強化全文檢索鍵資料行的唯一性,如下所示:

USE AdventureWorks2022;
GO
SELECT INDEXPROPERTY(OBJECT_ID('Production.Document'), 'PK_Document_DocumentNode',  'IsFulltextKey');

如果 PK_Document_DocumentNode 索引是用來強制全文鍵資料行的唯一性,這個範例就會傳回 1。 否則,它會傳回 0 或 NULL。 NULL 表示您正在使用無效的索引名稱、索引名稱沒有對應至資料表,或者資料表不存在等。

尋找全文文字鍵欄的識別碼

每個啟用全純文字功能的資料表都具有一個專門用來強制確保該資料表的資料列唯一的資料行(唯一鍵資料行)。 從 OBJECTPROPERTYEX 函數中取得的 TableFulltextKeyColumn 屬性會包含唯一索引鍵資料行的資料行識別碼。

若要取得這個識別碼,您可以使用 SELECT 陳述式來呼叫 OBJECTPROPERTYEX 函數。 請使用 OBJECT_ID 函數,將資料表的名稱 (table_name) 轉換成資料表識別碼,並且指定 TableFulltextKeyColumn 屬性,如下所示:

SELECT OBJECTPROPERTYEX(OBJECT_ID('table_name'), 'TableFulltextKeyColumn' ) AS 'Column Identifier';

範例

下列範例會傳回全文索引鍵欄位的標識或 NULL。 NULL 表示您正在使用無效的索引名稱、索引名稱沒有對應至資料表,或者資料表不存在等。

USE AdventureWorks2022;
GO
SELECT OBJECTPROPERTYEX(OBJECT_ID('Production.Document'), 'TableFulltextKeyColumn');
GO

下列範例顯示如何使用唯一鍵資料行的標識符,以取得資料行的名稱。

USE AdventureWorks2022;
GO

DECLARE @key_column SYSNAME

SET @key_column = COL_NAME(OBJECT_ID('Production.Document'),
   OBJECTPROPERTYEX(OBJECT_ID('Production.Document'), 'TableFulltextKeyColumn'));

SELECT @key_column AS 'Unique Key Column';
GO

此範例會傳回名為 Unique Key Column 的結果集欄位,其中顯示包含 Document 資料表之唯一鍵欄位名稱的單一資料列 DocumentNode。 如果這個查詢包含無效的索引名稱、索引名稱沒有對應至資料表,或者資料表不存在等,它就會傳回 NULL。

索引 varbinary(max) 和 XML 欄位

如果 varbinary(max)varbinaryxml 資料行已建立全文檢索索引,您可以像查詢其他具有全文檢索索引的資料行那樣使用全文檢索述詞 (CONTAINS 和 FREETEXT) 及函數 (CONTAINSTABLE 和 FREETEXTTABLE) 進行查詢。

索引 varbinary(max) 或 varbinary 資料

單一 varbinary(max)varbinary 資料行可以儲存許多類型的文件。 SQL Server 支援在作業系統中安裝並提供篩選器的任何文件類型。 每份文件的文件類型都是由文件的副檔名所識別。 例如,全文檢索搜尋會針對 .doc 副檔名使用支援 Microsoft Word 文件的篩選。 如需可用文件類型的清單,請查詢 sys.fulltext_document_types 目錄檢視。

全文檢索引擎可以使用在作業系統中安裝的現有篩選器。 您必須先將操作系統的篩選器、斷詞工具和字幹分析器載入伺服器執行個體中,才能使用它們,如下所示:

EXEC sp_fulltext_service @action = 'load_os_resources', @value = 1;

若要針對 varbinary(max) 資料行建立全文檢索索引,全文檢索引擎需要 varbinary(max) 資料行中文件副檔名的存取權。 這項資訊必須儲存在稱為類型資料行的資料表資料行中,而此資料行必須與全文檢索索引中的 varbinary(max) 資料行相關聯。 建立文件的索引時,全文檢索引擎會使用類型資料行中的副檔名來識別要使用的篩選。

索引 XML 資料

xml 資料類型資料行只會儲存 XML 文件和片段,而且只有 XML 篩選會用於這些文件。 因此,類型資料行是不必要的。 在 xml 資料行上,全文檢索索引會建立 XML 元素內容的索引,但忽略 XML 標記。 屬性值會被全文索引,除非它們是數值型的。 元素標記會當做 Token 界限來使用。 系統支援包含多種語言且格式正確的 XML 或 HTML 文件和片段。

如需編製索引和查詢 xml 資料行的詳細資訊,請參閱使用 XML 資料行進行全文檢索搜尋

停用或重新啟用資料表的全文檢索索引

在 SQL Server 中,所有使用者建立的資料庫預設都會啟用全文檢索。 此外,個別資料表也會在建立全文檢索索引並將資料行加入索引中後,立即自動啟用全文檢索索引。 從全文檢索索引中卸除最後一個資料行之後,資料表便會自動停用全文檢索索引。

在具有全文檢索索引的資料表上,您可以使用 SQL Server Management Studio,手動為資料表停用或重新啟用全文檢索索引。

  1. 展開伺服器群組,展開 [資料庫],然後展開包含您想要為其啟用全文索引的資料表所在的資料庫。

  2. 展開 [資料表] ,然後以滑鼠右鍵按一下您想要停用或重新啟用全文檢索索引的資料表。

  3. 選取 [全文檢索索引],然後選取 [停用全文檢索索引] 或 [啟用全文檢索索引]。

移除資料表的全文索引

  1. 在 [物件總管] 中,以滑鼠右鍵按一下含有您要刪除其全文檢索索引的資料表。

  2. 選取 <刪除全文檢索索引>。

  3. 出現提示要您確認是否要刪除全文檢索索引時,請選取 [確定]。

下一步