管理全文索引

查看或更改全文索引的属性

在 Management Studio 中查看或更改全文索引的属性

  1. 在对象资源管理器中,展开服务器。

  2. 展开“数据库”,然后展开包含全文索引的数据库。

  3. 展开 “表”

  4. 右键单击对其定义了全文索引的表,选择“全文索引”,然后在“全文索引”上下文菜单中单击“属性”。 此时将打开“全文索引属性” 对话框。

  5. “选择页” 窗格中,您可以选择下列页中的任一页:

    说明
    常规 显示全文索引的基本属性。 这些基本属性包括若干个可修改属性和多个不可更改属性,后者如数据库名称、表名和全文键列的名称。 可修改属性包括:

    全文索引非索引字表

    全文索引已启用

    更改跟踪

    搜索属性列表



    有关详细信息,请参阅常规 页) (全文索引属性
    “列” 显示可用于全文索引的表列。 对于选中的列,均会创建全文索引。 您可以根据需要选择将任意数目的可用列包括在全文索引中。 有关详细信息,请参阅) (列页的全文索引属性
    计划 使用此页可以创建或管理 SQL Server 代理作业的计划,该作业用于启动全文索引填充的表增量填充。 有关详细信息,请参阅 填充全文索引

    **重要**退出“全文索引属性”对话框后,任何新创建的计划都与SQL Server 代理作业相关联, (database_name开始增量表填充。table_name) 。
  6. 单击“ 确定”。保存任何更改并退出 “全文索引属性 ”对话框。

查看索引表和列的属性

可以使用多个 Transact-SQL 函数(如 OBJECTPROPERTYEX)来获取各种全文索引属性的值。 此信息可用于全文搜索的管理和故障排除。

下表列出了与索引表和列相关的全文属性及其相关的 Transact-SQL 函数。

属性 说明 函数
FullTextTypeColumn 表中的 TYPE COLUMN,其中包含列的文档类型信息。 COLUMNPROPERTY
IsFulltextIndexed 列是否启用了全文索引。 COLUMNPROPERTY
IsFulltextKey 索引是否为表的全文键。 INDEXPROPERTY
TableFulltextBackgroundUpdateIndexOn 表是否具有全文后台更新索引。 OBJECTPROPERTYEX
TableFulltextCatalogId 表的全文索引数据所在的全文目录 ID。 OBJECTPROPERTYEX
TableFulltextChangeTrackingOn 表是否启用了全文更改跟踪。 OBJECTPROPERTYEX
TableFulltextDocsProcessed 自开始全文检索以来所处理的行数。 OBJECTPROPERTYEX
TableFulltextFailCount 全文搜索未编制索引的行数。 OBJECTPROPERTYEX
TableFulltextItemCount 成功编制了全文索引的行数。 OBJECTPROPERTYEX
TableFulltextKeyColumn 全文唯一键列的列 ID。 OBJECTPROPERTYEX
TableFullTextMergeStatus 具有全文索引的表当前是否正在合并。 OBJECTPROPERTYEX
TableFulltextPendingChanges 要处理的挂起更改跟踪项的数目。 OBJECTPROPERTYEX
TableFulltextPopulateStatus 全文表的填充状态。 OBJECTPROPERTYEX
TableHasActiveFulltextIndex 表是否具有活动的全文索引。 OBJECTPROPERTYEX

获取有关全文键列的信息

通常情况下,CONTAINSTABLE 或 FREETEXTTABLE 行集值函数的结果需要与基表相联接。 在这样的情况下,需要知道唯一键列名称。 可以查询给定的唯一索引是否作为全文键使用,并且可以获取全文键列的标识符。

查询给定的唯一索引是否作为全文键列使用

  1. 使用 SELECT 语句调用 INDEXPROPERTY 函数。 在函数调用中,使用 OBJECT_ID 函数将表的名称 (table_name) 转换为表 ID,为表指定唯一索引的名称,并指定 IsFulltextKey 索引属性,如下所示:

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

    如果使用此索引来强制实现全文键列的唯一性,此语句返回 1,否则返回 0。

示例

下例查询 PK_Document_DocumentID 索引是否用于强制实现全文键列的唯一性,如下所示:

USE AdventureWorks  
GO  
SELECT INDEXPROPERTY ( OBJECT_ID('Production.Document'), 'PK_Document_DocumentID',  'IsFulltextKey' )  

如果使用 PK_Document_DocumentID 索引来强制实现全文键列的唯一性,则此示例返回 1。 否则,它返回 0 或 NULL。 NULL 表示您使用的是无效索引名称,索引名称与表不对应,或表不存在,等等。

查找全文键列的标识符

  1. 每个启用全文的表都有一个列,该列用于强制实现表中行的唯一性(“唯一键列”) 。 从 OBJECTPROPERTYEX 函数获取的 TableFulltextKeyColumn 属性包含唯一键列的列 ID。

    若要获取此标识符,可以使用 SELECT 语句调用 OBJECTPROPERTYEX 函数。 使用 OBJECT_ID 函数将表的名称 (table_name) 转换为表 ID,并指定 TableFulltextKeyColumn 属性,如下所示:

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

示例

下例返回全文键列的标识符或 NULL。 NULL 表示您使用的是无效索引名称,索引名称与表不对应,或表不存在,等等。

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

下例说明如何使用唯一键列的标识符获取列的名称。

USE AdventureWorks;  
GO  
DECLARE @key_column sysname  
SET @key_column = Col_Name(Object_Id('Production.Document'),  
ObjectProperty(Object_id('Production.Document'),  
'TableFulltextKeyColumn')   
)  
SELECT @key_column AS 'Unique Key Column';  
GO  

此示例返回一个名为 Unique Key Column的结果集列,该结果集列显示单个行,该行包含 Document 表的唯一键列 DocumentID 的名称。 请注意,如果此查询包含无效的索引名称,索引名称与表不对应或表不存在等,它将返回 NULL。

为表禁用和重新启用全文索引

在 SQL Server中,默认情况下所有由用户创建的数据库都启用了全文索引。 另外,在为表创建全文索引并将列添加到索引之后,就会自动为单个表启用全文索引。 从表的全文索引中删除最后一列时,会自动为表禁用全文索引。

对于具有全文索引的表,可以使用 SQL Server Management Studio手动为表禁用或重新启用全文索引。

为表启用全文索引

  1. 展开服务器组,展开 “数据库”,再展开包含要为其启用全文索引的表的数据库。

  2. 展开“表” ,然后右键单击要为其禁用或重新启用全文索引的表。

  3. 选择 “全文索引”,然后单击 “禁用全文索引”或 “启用全文索引”。

从表中删除全文索引

从表中删除全文索引

  1. 在对象资源管理器中,右键单击要删除的全文索引所在的表。

  2. 选择 “删除全文索引”。

  3. 在出现提示时,单击 “确定”,确认是否要删除该全文索引。