ALTER FULLTEXT INDEX (Transact-SQL)
更改全文索引的属性。
语法
ALTER FULLTEXT INDEX ON table_name
{ ENABLE
| DISABLE
| SET CHANGE_TRACKING { MANUAL | AUTO | OFF }
| ADD ( column_name
[ TYPE COLUMN type_column_name ]
[ LANGUAGE language_term ] [,...n] )
[ WITH NO POPULATION ]
| DROP ( column_name [,...n] )
[ WITH NO POPULATION ]
| START { FULL | INCREMENTAL | UPDATE } POPULATION
| {STOP | PAUSE | RESUME } POPULATION
| SET STOPLIST { OFF| SYSTEM | stoplist_name }
[ WITH NO POPULATION ]
}
[;]
参数
table_name
包含全文索引中的一列或多列的表或索引视图的名称。可以选择指定数据库和表所有者名称。ENABLE | DISABLE
通知 SQL Server 是否收集 table_name 的全文索引数据。ENABLE 激活全文索引;DISABLE 关闭全文索引。禁用索引时,表不支持全文查询。通过禁用全文索引,您可以关闭更改跟踪但保留全文索引,并且可以随时使用 ENABLE 重新激活全文索引。如果禁用全文索引,则全文索引元数据将保留在系统表中。禁用全文索引时,如果 CHANGE_TRACKING 处于启用状态(自动或手动更新),则索引状态将冻结,任何正在进行的爬网将停止,并且不会跟踪对表数据进行的新更改,也不会将这些更改传播到索引。
SET CHANGE_TRACKING {MANUAL | AUTO | OFF}
指定 SQL Server 是否会将对全文索引所覆盖的表列的更改(更新、删除或插入)传播到全文索引。通过 WRITETEXT 和 UPDATETEXT 所做的数据更改不会反映到全文索引中,也不能使用更改跟踪方法拾取。注意 有关更改跟踪交互和 WITH NO POPULATION 的信息,请参阅本主题后面的“备注”。
MANUAL
指定将通过调用 ALTER FULLTEXT INDEX … START UPDATE POPULATION Transact-SQL 语句来手动传播被跟踪的更改(“手动填充”)。您可以使用 SQL Server 代理来定期调用此 Transact-SQL 语句。AUTO
指定当基表中的数据修改时自动传播所跟踪的更改(自动填充)。尽管是自动传播更改,但这些更改可能不会立即反映到全文索引中。默认值为 AUTO。OFF
指定 SQL Server 将不保存对索引数据的更改的列表。ADD | DROP column_name
指定要添加到全文索引或从全文索引中删除的列。列必须为 char、varchar、nchar、nvarchar、text、ntext、image、xml、varbinary 或 varbinary(max) 类型。仅对先前为全文索引启用的列使用 DROP 子句。
TYPE COLUMN 和 LANGUAGE 与 ADD 子句一起使用,以设置 column_name 的属性。添加列后,必须重新填充该表的全文索引,才能使针对此列进行的全文查询生效。
注意 在全文索引中添加或删除某个列后,是否填充全文索引取决于是否启用了更改跟踪以及是否指定了 WITH NO POPULATION。有关详细信息,请参阅本主题后面的“备注”。
TYPE COLUMN type_column_name
指定表列的名称 (type_column_name),用于存储 varbinary、varbinary(max) 或 image 文档的文档类型。此列(称为类型列)包含用户提供的文件扩展名(.doc、.pdf、.xls 等)。类型列必须是 char、nchar、varchar 或 nvarchar 类型。仅当 column_name 指定 varbinary、varbinary(max) 或 image 列时,才指定 TYPE COLUMN type_column_name,在该列中数据作为二进制数据存储;否则 SQL Server 将返回错误。
注意 在建立索引时,全文引擎使用每个表行的类型列中的缩写来标识对 column_name 中的文档使用哪个全文搜索筛选器。筛选器按二进制流加载文档,并删除格式设置信息,然后将文档中的文本发送到断字器组件。有关详细信息,请参阅全文搜索筛选器。
LANGUAGE language_term
存储在 column_name 中的数据的语言。language_term 为可选参数,可以将其指定为与语言区域设置标识符 (LCID) 对应的字符串、整数或十六进制值。如果指定了 language_term,则它表示的语言将应用于搜索条件的所有元素。如果未指定值,则使用 SQL Server 实例的默认全文语言。
使用 sp_configure 存储过程访问有关 SQL Server 实例的默认全文语言的信息。有关详细信息,请参阅 default full-text language 选项。
如果指定为字符串,则 language_term 对应于 syslanguages 系统表中 alias 列的值。字符串必须用单引号引起来,如 'language_term'。如果指定为整数,则 language_term 就是标识该语言的实际 LCID。如果指定为十六进制值,则 language_term 将以 0x 开头,后跟 LCID 的十六进制值。十六进制值不能超过八位(包括前导零在内)。
如果该值是双字节字符集 (DBCS) 格式,则 SQL Server 会将其转换为 Unicode 格式。
对于指定为 language_term 的语言,必须启用断字符和词干分析器等资源。如果此类资源不支持指定的语言,则 SQL Server 将返回错误。
对于包含多种语言的文本数据的非 BLOB 和非 XML 列,或者列中所存储文本的语言未知时,请使用非特定 (0x0) 语言资源。对于存储在 XML 或 BLOB 类型列中的文档,在创建索引时,将使用文档内的语言编码。例如,在 XML 列中,XML 文档中的 xml:lang 属性将标识语言。在查询时,除非将 language_term 指定为全文查询的一部分,否则将使用以前在 language_term 中指定的值作为全文查询的默认语言。
[ ,...n]
指示可以为 ADD 或 DROP 子句指定多个列。指定多个列时,请使用逗号分隔这些列。WITH NO POPULATION
指定在执行 ADD 或 DROP 列操作或 SET STOPLIST 操作之后不填充全文索引。仅当用户执行 START...POPULATION 命令时,才会填充该索引。如果指定了 NO POPULATION,则 SQL Server 不会填充索引。仅当用户指定了 ALTER FULLTEXT INDEX...START POPULATION 命令后,才填充此索引。如果未指定 NO POPULATION,SQL Server 将填充索引。
如果启用了 CHANGE_TRACKING 并指定了 WITH NO POPULATION,SQL Server 将返回一个错误。如果启用了 CHANGE_TRACKING,但未指定 WITH NO POPULATION,SQL Server 将对索引执行完全填充。
注意 有关更改跟踪交互和 WITH NO POPULATION 的详细信息,请参阅本主题后面的“备注”。
START {FULL|INCREMENTAL|UPDATE} POPULATION
通知 SQL Server 开始填充 table_name 的全文索引。如果全文索引填充已在执行,SQL Server 将返回一个警告,并且不会启动新的填充。-
FULL
指定检索表中的每一行以进行全文索引,即使已对这些行进行了索引。INCREMENTAL
指定仅检索自上次填充以来修改的行以进行全文索引。仅当表包含一个类型为 timestamp 的列时,才能应用 INCREMENTAL。如果全文目录中的表不包含 timestamp 类型的列,则该表将进行完全填充。UPDATE
指定对自上次更新更改跟踪索引以来的所有插入、更新或删除进行处理。必须对表启用更改跟踪填充,但不应打开后台更新索引或自动更改跟踪。
{STOP | PAUSE | RESUME } POPULATION
停止或暂停正在进行的任何填充;或者停止或恢复任何暂停的填充。STOP POPULATION 不会停止自动更改跟踪或后台更新索引。若要停止更改跟踪,请使用 SET CHANGE_TRACKING OFF。
PAUSE POPULATION 和 RESUME POPULATION 只能用于完全填充。它们与其他填充类型无关,因为其他填充从爬网停止的位置恢复爬网。
SET STOPLIST { OFF| SYSTEM | stoplist_name }
更改与索引(如果有)关联的全文非索引字表。OFF
指定没有与全文索引关联的非索引字表。SYSTEM
指定应对此全文索引使用默认的全文系统 STOPLIST。stoplist_name
指定要与全文索引关联的非索引字表的名称。
有关详细信息,请参阅非索引字和非索引字表。
注释
在 xml 列上,可以创建一个全文索引来为 XML 元素的内容创建索引,但忽略 XML 标记。不为数值的属性值都会进行全文索引。元素标记用作标记边界。支持包含多种语言的格式正确的 XML 或 HTML 文档和片段。有关详细信息,请参阅XML 列的全文索引。
更改跟踪和 NO POPULATION 参数的交互
是否填充全文索引取决于是否启用了更改跟踪以及在 ALTER FULLTEXT INDEX 语句中是否指定了 WITH NO POPULATION。下表概述了其交互结果。
更改跟踪 |
WITH NO POPULATION |
结果 |
---|---|---|
未启用 |
未指定 |
对索引执行完全填充。 |
未启用 |
指定 |
在发出 ALTER FULLTEXT INDEX...START POPULATION 语句之前,不会进行任何索引填充。 |
启用 |
指定 |
引发错误,并且不会更改索引。 |
启用 |
未指定 |
对索引执行完全填充。 |
有关填充全文索引的详细信息,请参阅全文索引填充。
权限
用户必须对相应表或索引视图拥有 ALTER 权限,或者是 sysadmin 固定服务器角色、db_ddladmin 固定数据库角色或 db_owner 固定数据库角色的成员。
如果指定了 SET STOPLIST,则用户必须对此非索引字表拥有 REFERENCES 权限。此 STOPLIST 的所有者可授予此权限。此外,授予 REFERENCES 权限需要拥有 ALTER FULLTEXT CATALOG 权限。
注意 |
---|
授予 public 对 SQL Server 随附的默认非索引字表的 REFERENCE 权限。 |
示例
A. 设置手动更改跟踪
以下示例对 AdventureWorks2008R2 数据库的 JobCandidate 表上的全文索引设置手动更改跟踪。
USE AdventureWorks2008R2;
GO
ALTER FULLTEXT INDEX ON HumanResources.JobCandidate
SET CHANGE_TRACKING MANUAL;
GO
B. 启动完全填充
以下示例对 AdventureWorks2008R2 数据库的 JobCandidate 表上的全文索引启动完全填充。
USE AdventureWorks2008R2;
GO
ALTER FULLTEXT INDEX ON HumanResources.JobCandidate
START FULL POPULATION;
GO