CREATE FULLTEXT INDEX (Transact-SQL)

更新日期: 2006 年 12 月 12 日

针对数据库中某个表或索引视图的一列或多列创建全文索引。每个表或索引视图只允许有一个全文索引。默认情况下,创建数据库后将启用全文搜索。

主题链接图标Transact-SQL 语法约定

语法

CREATE FULLTEXT INDEX ON table_name
     [(column_name [TYPE COLUMN type_column_name] 
          [LANGUAGE language_term] [,...n])]
     KEY INDEX index_name
          [ON fulltext_catalog_name]
     [WITH 
          {CHANGE_TRACKING {MANUAL | AUTO | OFF [, NO POPULATION]}}
     ]

参数

  • table_name
    包含全文索引中的一列或多列的表或索引视图的名称。
  • column_name
    全文索引中包括的一列或多列的名称。只能对类型为 charvarcharncharnvarchartextntextimagexmlvarbinary 的列进行全文索引。
  • TYPE COLUMN type_column_name
    table_name 中列的名称,用于存储 column_name 的文档类型。

    type_column_name 的类型必须为 charncharvarcharnvarchar。仅当 column_name 中的一个或多个列属于类型 varbinary(max)image 时,才指定 type_column_name;否则 SQL Server 将返回一个错误。

    有关详细信息,请参阅全文搜索筛选器

  • LANGUAGE language_term
    存储在 column_name 中的数据的语言。

    language_term 为可选参数,可以将其指定为与语言区域设置标识符 (LCID) 对应的字符串、整数或十六进制值。如果指定了 language_term,则它表示的语言将用于对存储在 charncharvarcharnvarchartextntext 列中的数据进行索引。如果未针对列将 language_term 指定为全文谓词的一部分,则该语言就是查询时所使用的默认语言。如果没有指定任何值,则使用 SQL Server 实例的默认语言。

    如果是未知的语言,或有多种语言要存储在 column_name 中(并且列的数据类型不是 BLOB 或 XML),则使用非特定 (0x0) 语言。有关详细信息,请参阅有关全文搜索的国际化注意事项

    可使用 sp_configure 存储过程访问有关 Microsoft SQL Server 实例的默认全文语言的信息。有关详细信息,请参阅 sp_configure (Transact-SQL)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
    指示可指定多列来进行全文索引。指定多列时,使用逗号分隔每个列。
  • KEY INDEX index_name
    table_name 的唯一键索引的名称。KEY INDEX 必须是唯一的单键非空值列。为全文唯一键选择最小的唯一键索引。为了获得最佳性能,建议使用 CLUSTERED 索引。
  • ON fulltext_catalog_name
    用于全文索引的全文目录。数据库中必须已存在该目录。此子句为可选项。如果未指定,则使用默认目录。如果默认目录不存在,SQL Server 将返回错误。

    fulltext_catalog_name 文件组或默认全文目录(如果未指定任何目录)不能为 READONLY 或 OFFLINE。否则,SQL Server 将返回错误。

  • WITH CHANGE_TRACKING {MANUAL | AUTO | OFF [ **,**NO POPULATION]}
    指定 SQL Server 是否维护一份对索引数据的全部更改的列表。更改跟踪不会记录通过 WRITETEXT 和 UPDATETEXT 进行的数据更改。

    • MANUAL
      指定是使用 SQL Server 代理按计划传播更改跟踪日志,还是由用户手动进行传播。
    • AUTO
      指定在关联的表中修改了数据时,SQL Server 自动更新全文索引。默认值为 AUTO。

      注意 虽然可自动传播更改,但可能无法立即在全文索引中反映这些更改。有关用于监视全文索引进程以及用于诊断全文索引相关问题的属性的详细信息,请参阅使用 Transact-SQL 函数获取全文属性值

    • OFF [ **,**NO POPULATION]
      指定 SQL Server 不保留对索引数据的更改的列表。

      仅当 CHANGE_TRACKING 为 OFF 时,才能使用 NO POPULATION 选项。如果指定了 NO POPULATION,则 SQL Server 在创建索引后不会对其进行填充。只有在用户使用 START FULL 或 INCREMENTAL POPULATION 子句执行 ALTER FULLTEXT INDEX 命令后,才会填充索引。如果未指定 NO POPULATION,则 SQL Server 创建索引后将对其进行完全填充。

权限

用户必须对全文目录具有 REFERENCES 权限,对视图中的表具有 ALTER 权限,或者是 sysadmin 固定服务器角色、db_ownerdb_ddladmin 固定数据库角色的成员。

示例

以下示例创建一个针对 HumanResources.JobCandidate 表的全文索引。

USE AdventureWorks;
GO
CREATE UNIQUE INDEX ui_ukJobCand ON HumanResources.JobCandidate(JobCandidateID);
CREATE FULLTEXT CATALOG ft AS DEFAULT;
CREATE FULLTEXT INDEX ON HumanResources.JobCandidate(Resume) KEY INDEX ui_ukJobCand;
GO

请参阅

参考

ALTER FULLTEXT INDEX (Transact-SQL)
DROP FULLTEXT INDEX (Transact-SQL)
GRANT (Transact-SQL)

其他资源

全文搜索

帮助和信息

获取 SQL Server 2005 帮助

更改历史记录

发布日期 历史记录

2006 年 12 月 12 日

新增内容:
  • 阐明了全文索引也可应用于索引视图。
  • 添加了一个指向筛选器主题的链接以阐明 TYPE COLUMN 子句。