SQL Server 2008 中全文搜索的重大更改
本主题介绍全文搜索的重大更改。这些更改可能导致基于 SQL Server 的早期版本的应用程序、脚本或功能无法继续使用。在进行升级时可能会遇到这些问题。有关详细信息,请参阅使用升级顾问来准备升级。
重大更改
下面是 SQL Server 2008 中对全文搜索的重大更改。
功能 |
应用场景 |
SQL Server 2005 |
SQL Server 2008 |
|---|---|---|---|
具有用户定义类型 (UDT) 的 CONTAINSTABLE |
全文键为 SQL Server 用户定义类型,例如,MyType = char(1)。 |
返回键的类型是为用户定义类型指定的类型。 对于示例,它应是 char(1)。 |
返回键的类型是用户定义类型。对于示例,它应是 MyType。 |
CONTAINSTABLE 和 FREETEXTTABLETransact-SQL 语句的 top_n_by_rank 参数 |
top_n_by_rank 查询将 0 用作该参数。 |
失败并显示一个错误消息,说明您必须使用一个大于零的值。 |
成功,返回零行。 |
CONTAINSTABLE 和 ItemCount |
在它将更改推入 MSSearch 之前从基表中删除行。 |
CONTAINSTABLE 返回虚影记录。ItemCount 保持不变。 |
CONTAINSTABLE 不返回任何虚影记录。 |
FREETEXT 或 FREETEXTTABLE |
搜索确切短语。 |
如果使用双引号将搜索字符串 (freetext_string) 引起来,将不执行词干分析和同义词库查询处理;该字符串仅返回完全匹配项,就如同短语搜索那样。例如,在 FREETEXT 谓词中指定“fast ships”将仅返回包含“fast ships”的那些行;而不返回短语“ship your package fast”。 |
FREETEXT 和 FREETEXTTABLE 不再允许短语搜索,这两个查询将执行词干分析和同义词库查询处理,不论搜索字符串是使用单引号还是双引号引起来的。例如,搜索“fast ships”将同时返回“fast ships”和“ship your package fast”。 若要搜索某一短语,请使用 CONTAINS 或 CONTAINSTABLE。 |
ItemCount |
表包含 Null 文档或类型列。 |
除了索引文档之外,Null 文档或类型为 Null 的文档也计算在 ItemCount 值之内。 |
仅索引文档计算在 ItemCount 值之内。 |
目录 ItemCount |
扩展名为 NULL 的 Blob 列。 |
它计算在目录的 ItemCount 之内。 |
它不计算在目录的 ItemCount 之内。 |
UniqueKeyCount |
从目录查询唯一键计数,例如,有两个表(table1 和 table2),每个表都包含三个单词:word1、word2 和 word3。 |
UniqueKeyCount = 9。下表总结了如何得出此值: table1 = 3 table1 全文索引的 EOF = 1 table2 = 3 Table2 全文索引的 EOF = 1 全文目录 = 1 |
对于每个表,UniqueKeyCount 等于非重复关键字数目加 1 (0xFF)。不会将在多个文档中出现的同一个单词视为新的唯一键。 对于目录,UniqueKeyCount 是此目录下每个表的 UniqueKeyCount 之和。不同表中的相同单词被视为唯一键。在这种情况下唯一键计数是 8。 |
precompute rank 服务器级选项 |
FREETEXTTABLE 查询的性能优化。 |
该选项设置为 1 时,指定了 top_n_by_rank 的 FREETEXTTABLE 查询会使用存储在全文目录中的预计算排名数据。 |
不支持。 |
更新键列时的 sp_fulltext_pendingchanges |
对包含两行的表的其中一行更新全文键列,并运行 sp_fulltext_pendingchanges。 |
两个行均显示。 |
只显示一行。 |
内联函数 |
带全文运算符的内联函数 |
返回错误消息。 |
返回相关行。 |
通过使用 sp_fulltext_database 启用或禁用全文搜索。 |
全文查询不返回任何结果。如果对数据库禁用全文功能,则将不允许全文操作。 |
为全文查询返回结果,并且允许全文操作,即使对数据库禁用全文功能也是如此。 |
|
特定于区域设置的非索引字 |
使用父语言下特定于区域设置的子语言(如比利时法语和加拿大法语)的查询。 |
使用特定于区域设置的子语言的查询将由其父语言的组件(断字符、词干分析器和非索引字)处理。例如,“法语(法国)”组件用于分析“法语(比利时)”。 |
必须为每个区域设置标识符 (LCID) 显式添加非索引字。例如,您需要为比利时、加拿大和法国指定一个 LCID。 |
同义词库词干分析进程 |
使用同义词库和变形(词干分析)。 |
同义词库单词在其扩展之后自动进行词干分析。 |
如果要得到扩展形式中的词干,则需要显式添加词干。 |
全文目录路径和文件组 |
使用全文目录。 |
每个全文目录都有一个物理路径,并且都属于一个文件组。系统将其视为数据库文件。 |
全文目录是虚拟对象,不属于任何文件组。全文目录是表示一组全文索引的逻辑概念。 注意
指定全文目录的 SQL Server 2005Transact-SQL DDL 语句可正常运行。
|
使用此目录视图的 path、data_space_id 和 file_id。 |
这些列都返回一个特定值。 |
由于全文目录已不再位于文件系统中,因而这些列均返回 NULL。 |
|
使用此不推荐使用的系统表的 path 列。 |
返回全文目录的文件系统路径。 |
由于全文目录已不再位于文件系统中,因而返回 NULL。 |
|
使用这些不推荐使用的存储过程的 PATH 列。 |
返回全文目录的文件系统路径。 |
由于全文目录已不再位于文件系统中,因而返回 NULL。 |
|
使用此存储过程的 sp_help_fulltext_catalog_components。 |
返回用于当前数据库中所有全文目录的所有组件(筛选器、断字符和协议处理程序)的列表。 |
返回空行。 |
|
使用 IsFullTextEnabled 属性。 |
IsFullTextEnabled 设置指示给定数据库中是否启用了全文搜索。 |
此列的值没有任何效果。用户数据库始终启用全文搜索。 |
更改历史记录
更新的内容 |
|---|
在表中添加了关于 FREETEXT 功能的行。 |
注意