管理全文索引
查看或更改全文索引的属性
在 Management Studio 中查看或更改全文索引的属性
在对象资源管理器中,展开服务器。
展开“数据库”,然后展开包含全文索引的数据库。
展开 “表” 。
右键单击对其定义了全文索引的表,选择“全文索引”,然后在“全文索引”上下文菜单中单击“属性”。 此时将打开“全文索引属性” 对话框。
在 “选择页” 窗格中,您可以选择下列页中的任一页:
页 说明 常规 显示全文索引的基本属性。 这些基本属性包括若干个可修改属性和多个不可更改属性,后者如数据库名称、表名和全文键列的名称。 可修改属性包括:
全文索引非索引字表
全文索引已启用
更改跟踪
搜索属性列表
有关详细信息,请参阅常规 页) (全文索引属性 。“列” 显示可用于全文索引的表列。 对于选中的列,均会创建全文索引。 您可以根据需要选择将任意数目的可用列包括在全文索引中。 有关详细信息,请参阅) (列页的全文索引属性 。 计划 使用此页可以创建或管理 SQL Server 代理作业的计划,该作业用于启动全文索引填充的表增量填充。 有关详细信息,请参阅 填充全文索引。
**重要**退出“全文索引属性”对话框后,任何新创建的计划都与SQL Server 代理作业相关联, (database_name开始增量表填充。table_name) 。单击“ 确定”。保存任何更改并退出 “全文索引属性 ”对话框。
查看索引表和列的属性
可以使用多个 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 行集值函数的结果需要与基表相联接。 在这样的情况下,需要知道唯一键列名称。 可以查询给定的唯一索引是否作为全文键使用,并且可以获取全文键列的标识符。
查询给定的唯一索引是否作为全文键列使用
使用 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 表示您使用的是无效索引名称,索引名称与表不对应,或表不存在,等等。
查找全文键列的标识符
每个启用全文的表都有一个列,该列用于强制实现表中行的唯一性(“唯一键列”) 。 从 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手动为表禁用或重新启用全文索引。
为表启用全文索引
展开服务器组,展开 “数据库”,再展开包含要为其启用全文索引的表的数据库。
展开“表” ,然后右键单击要为其禁用或重新启用全文索引的表。
选择 “全文索引”,然后单击 “禁用全文索引”或 “启用全文索引”。
从表中删除全文索引
从表中删除全文索引
在对象资源管理器中,右键单击要删除的全文索引所在的表。
选择 “删除全文索引”。
在出现提示时,单击 “确定”,确认是否要删除该全文索引。