升级全文搜索

适用于: SQL Server Azure SQL 数据库

SQL Server在安装期间或从早期版本的 SQL Server 附加、还原或复制数据库文件和全文目录时升级全文搜索。

升级服务器实例

对于就地升级,SQL Server 实例与旧版本的 SQL Server 并行设置,并迁移数据。 如果旧版本的 SQL Server 已安装全文搜索,则会自动安装新版本的全文搜索。 并行安装意味着以下每个组件都存在于 SQL Server 实例级别。

断字符、词干分析器和筛选器
每个实例目前均使用自己的一组断字符、词干分析器和筛选器,而不受这些组件的操作系统版本的限制。 而且,这些组件在各个实例级也很容易注册和配置。 有关详细信息,请参阅 配置和管理断字符和词干分析器以便搜索配置和管理搜索筛选器

筛选器后台程序宿主
全文筛选器后台程序宿主进程可以安全地加载和驱动用于索引和查询的可扩展外部组件(例如断字符、词干分析器和筛选器),而不会损害全文引擎的完整性。 服务器实例对所有多线程筛选器使用多线程进程,并对所有单线程筛选器使用单线程进程。

注意

SQL Server 2008 (10.0.x) 为 FDHOST Launcher 服务引入了一个服务帐户, (MSSQLFDLauncher) 。 此服务将服务帐户信息传播到SQL Server特定实例的筛选器守护程序主机进程。 有关设置服务帐户的信息,请参阅 设置用于全文筛选器后台程序启动器的服务帐户

在 SQL Server 2005 (9.x) 中,每个全文索引驻留在属于文件组的全文目录中,具有物理路径,并被视为数据库文件。 在 SQL Server 2008 (10.0.x) 及更高版本中,全文目录是包含一组全文索引的逻辑或虚拟对象。 因此,新的全文目录不会视为带有物理路径的数据库文件。 但是,在升级包含数据文件的所有全文目录期间,将在相同磁盘上创建新的文件组。 这可以在升级后维护旧磁盘的 I/O 行为。 该目录的所有全文检索均被放置到新的文件组中(如果存在根路径)。 如果旧的全文目录路径无效,升级过程将全文检索保留在与基表相同的文件组中,或者对于分区表,则保留在主文件组中。

全文升级选项

升级SQL Server实例时,用户界面允许你选择以下全文升级选项之一。

导入
导入全文目录。 一般情况下,导入速度比重新生成速度要快很多。 例如,当仅使用一个 CPU 时,导入的运行速度比重新生成要快 10 倍左右。 但是,导入的全文目录不使用随最新版本的 SQL Server 一起安装的新断字符。 若要确保查询结果的一致性,必须重新生成全文目录。

备注

重新生成可以以多线程模式运行,如果可用的 CPU 在 10 个以上,且您允许重新生成操作使用所有这些 CPU,则重新生成操作的运行速度可能比导入更快。

如果全文目录不可用,则会重新生成关联的全文检索。 此选项仅对 SQL Server 2005 (9.x) 数据库可用。

有关导入全文检索的影响的信息,请参阅本主题后面的“有关选择全文升级选项的注意事项”。

重新生成
使用新的和增强的断字符重新生成全文目录。 重新生成索引可能需要一些时间,且升级后可能需要占用大量的 CPU 和内存。

重置
重置全文目录。 从 SQL Server 2005 (9.x) 升级时,将删除全文目录文件,但会保留全文目录和全文索引的元数据。 在进行升级后,所有全文检索将禁用更改跟踪,并且不会自动启动爬网。 在升级完成后,目录将保留为空,直至手动执行完全填充。

有关选择全文升级选项的注意事项

为升级选择升级选项时,请考虑以下几点:

  • 需要查询结果的一致性吗?

    SQL Server安装供Full-Text和语义搜索使用的新断字符。 在建立索引时和查询时均使用断字符。 如果您没有重新生成全文目录,搜索结果可能不一致。 如果发出全文查询来查找在以前版本的 SQL Server 和当前断字符中以不同方式断开的短语,则可能无法检索包含该短语的文档或行。 其原因在于,建立了索引的短语是使用与正使用的查询不同的逻辑进行断字的。 解决方法是使用新的断字符来重新填充(重新生成)全文目录,以便索引时行为和查询时行为完全相同。 可以选择“重新生成”选项来完成此操作,也可以在选择“导入”选项后手动重新生成。

  • 是否基于整数全文键列生成了任何全文检索?

    重新生成执行内部优化,在某些情况下该优化可提高升级的全文检索的查询性能。 具体来说,如果您具有的全文目录包含基表的全文键列为整数数据类型的全文检索,则重新生成将在升级后实现全文查询的理想性能。 在这种情况下,我们强烈建议使用 “重新生成” 选项。

    备注

    对于全文索引,建议作为全文键的列采用整数数据类型。 有关详细信息,请参阅 改进全文索引的性能

  • 使服务器实例处于联机状态的优先级是什么?

    升级期间的导入或重新生成操作会占用很多 CPU 资源,这会延迟其余服务器实例的升级和联机。 如果使服务器实例尽快处于联机状态非常重要,并且希望在升级后运行手动填充,则适合 “重置”

导入全文索引后确保查询结果的一致性

如果在升级 SQL Server 2005 (9.x) 数据库时导入了全文目录,则由于新旧断字符的行为差异,查询和全文索引内容之间可能会出现不匹配。 在这种情况下,若要保证查询和全文检索内容之间的完全匹配,请选择以下选项之一:

有关断字符的详细信息,请参阅 配置和管理断字符和词干分析器以便搜索

将干扰词文件升级到非索引字表

从 SQL Server 2005 (9.x) 升级数据库时,将不再使用干扰字文件。 但是,旧的干扰字文件存储在 FTDATA\ FTNoiseThesaurusBak 文件夹中,稍后可以在更新或生成相应的SQL Server非索引字表时使用它们。

从 SQL Server 2005 升级后 (9.x) :

  • 如果从未在安装 SQL Server 2005 (9.x) 中添加、修改或删除任何干扰字文件,则系统非索引字列表应满足你的需求。

  • 如果在 SQL Server 2005 (9.x) 中修改了干扰字文件,则这些修改在升级过程中会丢失。 若要重新创建这些更新,必须在对应的非索引字表中手动重新创建这些修改。 有关详细信息,请参阅 ALTER FULLTEXT STOPLIST (Transact-SQL)

  • 如果不想将任何非索引字应用于全文索引 (例如,如果在 SQL Server 2005 (9.x) 安装) 中删除或擦除了干扰字文件,则必须关闭每个升级的全文索引的非索引列表。 运行以下 Transact-SQL 语句 (将 database 替换为升级的数据库的名称,将 替换为 ) 的名称:

    Use database;   
    ALTER FULLTEXT INDEX ON table  
       SET STOPLIST OFF;  
    GO  
    

    STOPLIST OFF 子句删除非索引字筛选,并触发对表的填充,而不会筛选任何视为干扰词的词语。

备份和导入全文目录

对于在升级期间重新生成或重置的全文目录(以及对于新的全文目录),全文目录只是一个逻辑概念,并不驻留在文件组中。 因此,若要备份全文目录,必须识别包含目录的全文索引的每个文件组,并逐个备份它们。 有关详细信息,请参阅 备份和还原全文目录和索引

对于从 SQL Server 2005 (9.x) 导入的全文目录,全文目录仍然是其自己的文件组中的数据库文件。 SQL Server 2005 (9.x) 全文目录的备份过程仍适用,但 msFTESQL 服务在SQL Server中不存在。 有关 SQL Server 2005 (9.x) 过程的信息,请参阅 SQL Server 2005 联机丛书中的备份和还原Full-Text目录

在升级数据库时迁移全文索引

可以使用附加、还原或复制数据库向导将以前版本的 SQL Server 中的数据库文件和全文目录升级到现有实例。 SQL Server 2005 (9.x) 全文索引(如果有)已导入、重置或重新生成。 upgrade_option 服务器属性控制在升级这些数据库期间服务器实例使用哪个全文升级选项。

附加、还原或复制任何 SQL Server 2005 (9.x) 数据库较新的实例后,数据库将立即可用,然后自动升级。 导入可能需要数小时,而重新生成所需的时间最多时可能十倍于此,具体取决于要编制索引的数据量。 另请注意,将升级选项设置为“导入”时,如果全文目录不可用,则会重新生成关联的全文检索。

更改服务器实例的全文升级行为

还原 SQL Server 2005 (9.x) Full-Text 目录的注意事项

从 SQL Server 2005 (9.x) 数据库升级全文数据的一种方法是将完整数据库备份还原到较新的 SQL Server 实例。

导入 SQL Server 2005 (9.x) 全文目录时,可以备份和还原数据库和目录文件。 此行为与 SQL Server 2005 (9.x) 相同:

  • 完整数据库备份将包括全文目录。 若要引用全文目录,请使用其 SQL Server 2005 (9.x) 文件名sysft_+catalog-name

  • 如果全文目录处于脱机状态,备份将失败。

有关备份和还原 SQL Server 2005 (9.x) 全文目录的详细信息,请参阅备份和还原Full-Text目录以及 SQL Server 2005 (9.x) 联机丛书中的文件备份和还原和Full-Text目录。

在较新的 SQL Server 实例上还原数据库时,将为全文目录创建新的数据库文件。 该文件的默认名称是 ftrow_catalog-name.ndf。 例如,如果 catalog-namecat1,则SQL Server数据库文件的默认名称为 ftrow_cat1.ndf。 但是,如果目标目录中已使用该默认名称,新数据库文件则命名为 ftrow_catalog-name{GUID}.ndf,其中 GUID 是新文件的全局唯一标识符。

导入目录后, sys.database_filessys.master_files经过更新以删除目录项且 sys.fulltext_catalogs 中的 path 列设置为 NULL。

备份数据库

还原数据库备份

示例

以下示例使用 RESTORE 语句中的 MOVE 子句还原名为 ftdb1的 SQL Server 2005 (9.x) 数据库。 SQL Server 2005 (9.x) 数据库、日志和目录文件将移动到 SQL Server 服务器实例上的新位置,如下所示:

  • 数据库文件 ftdb1.mdf移动到 C:\Program Files\Microsoft SQL Server\MSSQL.1MSSQL13.MSSQLSERVER\MSSQL\DATA\ftdb1.mdf

  • 日志文件 ftdb1_log.ldf移动到日志磁盘驱动器上的日志目录 log_drive:\log_directory\ftdb1_log.ldf中。

  • sysft_cat90 目录对应的目录文件移动到 C:\temp。 导入全文索引后,它们将自动放置在数据库文件 C:\ftrow_sysft_cat90.ndf 中,并删除 C:\temp。

RESTORE DATABASE [ftdb1] FROM  DISK = N'C:\temp\ftdb1.bak' WITH  FILE = 1,  
   MOVE N'ftdb1' TO N'C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\ftdb1.mdf',  
    MOVE N'ftdb1_log' TO N'log_drive:\log_directory\ftdb1_log.ldf',  
    MOVE N'sysft_cat90' TO N'C:\temp';  

附加 SQL Server 2005 数据库

在 SQL Server 2008 (10.0.x) 及更高版本中,全文目录是一个引用一组全文索引的逻辑概念。 全文目录是虚拟对象,不属于任何文件组。 但是,当您将包含全文目录文件的 SQL Server 2005 (9.x) 数据库附加到较新的 SQL Server 服务器实例时,目录文件会连同其他数据库文件一起从以前的位置附加,这与 SQL Server 2005 (9.x) 相同。

SQL Server上每个附加的全文目录的状态与从 200 (5 SQL Server 9.x) 分离数据库时的状态相同。 如果分离操作暂停了任何全文索引填充,则会在SQL Server恢复填充,并且全文索引可用于全文搜索。

如果SQL Server找不到全文目录文件,或者在附加操作期间移动了全文文件,但没有指定新位置,则行为取决于所选的全文升级选项。 如果全文升级选项为“导入”或“重新生成”,则重新生成附加的全文目录。 如果全文升级选项为“重置”,则重置附加的全文目录。

有关分离和附加数据库的详细信息,请参阅数据库分离和附加 (SQL Server) CREATE DATABASE (SQL Server Transact-SQL) sp_attach_dbsp_detach_db (Transact-SQL)

另请参阅

全文搜索入门
配置和管理断字符和词干分析器以便搜索
配置和管理搜索筛选器