SQL Server 2005 全文搜索包括改进和更新的干扰词文件
文章编号 |
: |
905617 |
最后修改 |
: |
2007年11月20日 |
修订 |
: |
3.2 |
本页
简介
Microsoft SQL Server 2005 全文搜索包括改进和更新的干扰词文件。
这些干扰词文件位于以下目录中:
$SQL_Server_Install_Path\Microsoft SQL Server\MSSQL.1\MSSQL\FTDATA\
在同时设置 SQL Server 2005 和全文搜索支持时,会创建此目录并安装干扰词文件。
注意:如果您使用的是较低版本的 SQL Server 中的自定义干扰词文件,则在升级到 SQL Server 2005 后,这些自定义干扰词文件将不再有效。要继续使用这些自定义干扰词文件,必须按照“更多信息”一节中的步骤操作。
更多信息
从 SQL Server 2000 或 SQL Server 7.0 升级到 SQL Server 2005 后,将根据改进和更新的 SQL Server 2005 干扰词文件填充全文目录。
来自以前 SQL Server 安装的干扰词文件将被放在以下目录中:
$SQL_Server_Install_Path\Microsoft SQL Server\MSSQL.1\MSSQL\Binn\FTERef
此外,旧的干扰词文件名也将被更新。例如,简体中文干扰词文件名称将从 noise.chs 更新为 noiseCHS.MSSearch2x.txt。
要在升级到 SQL Server 2005 后继续使用旧的干扰词文件,请按照下列步骤操作:
1. |
升级到 SQL Server 2005 后,立即停止全文目录填充。为此,对每个全文索引运行以下 ALTER FULLTEXT INDEX 命令: ALTER FULLTEXT INDEX ON table_name STOP POPULATION 注意:在此命令中,table_name 是表名称的占位符。 ALTER FULLTEXT INDEX ON table_name SET CHANGE_TRACKING OFF 有关如何停止全文索引填充的更多信息,请参见 SQL Server 联机丛书中的“更改全文索引 (Transact-SQL)”主题。 |
2. |
将旧的干扰词文件从 $SQL_Server_Install_Path\Microsoft SQL Server\MSSQL.1\MSSQL\Binn\FTERef 目录复制到 $SQL_Server_Install_Path\Microsoft SQL Server\MSSQL.1\MSSQL\FTDATA\ 目录。 $SQL_Server_Install_Path\Microsoft SQL Server\MSSQL.1\MSSQL\Binn\FTERef |
3. |
重命名旧的干扰词文件,以便与 SQL Server 2005 干扰词文件的名称一致。例如,将简体中文干扰词文件的名称 noiseCHS.MSSearch2x.txt 重命名为 noiseCHS.txt。 |
4. |
重新填充全文目录。要重新启动填充,请对每个全文索引运行以下 ALTER FULLTEXT INDEX 命令: ALTER FULLTEXT 如果要使用更改跟踪,请运行以下命令来重新启动填充并启用更改跟踪: ALTER FULLTEXT 有关如何启动全文索引填充的更多信息,请参见 SQL Server 联机丛书中的“更改全文索引 (Transact-SQL)”主题。 |
示例脚本
以下代码是对步骤 1 中的每个全文索引停止全文索引填充的一个示例脚本。可以将此脚本改为对步骤 4 中的每个全文索引启动全文索引填充。
-- Sample script to stop full-text index population for
-- each full-text index.
DECLARE @table_name NVARCHAR(517),
@schema_name NVARCHAR(517);
DECLARE @exec_str NVARCHAR(4000);
DECLARE @change_tracking_state NCHAR(1);
-- Retrieve a list of tables with full-text indexes and stop
-- full-text index population for each full-text index.
DECLARE ms_crs_ftind CURSOR STATIC LOCAL FOR
SELECT t.name, SCHEMA_NAME(t.schema_id), ft.change_tracking_state
FROM sys.fulltext_indexes AS ft
JOIN sys.tables AS t
ON (ft.object_id = t.object_id);
OPEN ms_crs_ftind;
FETCH ms_crs_ftind INTO @table_name, @schema_name, @change_tracking_state;
WHILE @@FETCH_STATUS >= 0
BEGIN
-- If change tracking is enabled ('O' indicates change tracking
-- is OFF), stop change tracking before stopping population.
IF (@change_tracking_state != N'O')
BEGIN
SELECT @exec_str = 'ALTER FULLTEXT INDEX ON '
+ QUOTENAME(@schema_name,'[')+'.'+ QUOTENAME(@table_name,'[')
+ ' SET CHANGE_TRACKING OFF ';
EXEC (@exec_str);
END
-- Stop full-text index population for each full-text index.
SELECT @exec_str = 'ALTER FULLTEXT
+ QUOTENAME(@schema_name,'[')+'.'+QUOTENAME(@table_name,'[')
+ ' STOP POPULATION ';
EXEC (@exec_str);
FETCH ms_crs_ftind INTO @table_name,@schema_name, @change_tracking_state;
END
DEALLOCATE ms_crs_ftind;
------------------------------------
------------------------------------
干扰词
为了精简全文索引,Microsoft SQL Server 提供了一种机制,用来去掉那些经常出现但对搜索没有帮助的词。这些词称为“干扰词”或“终止词”。干扰词列在针对各个区域设置的干扰词文件中。例如,在“英语”区域设置中,诸如“a”、“and”、“is”和“the”之类的词就会列在英语干扰词文件中,并且凭经验知道它们对搜索没有用处,因此将它们排除在全文索引外。但是,全文索引会考虑干扰词的位置。例如,对于短语“Instructions are applicable to these Adventure Works Cycles models”而言,下表显示了短语中各个词的位置:
词或标记 |
位置 |
Instructions |
1 |
are |
2 |
applicable |
3 |
to |
4 |
these |
5 |
Adventure |
6 |
Works |
7 |
Cycles |
8 |
models |
9 |
位于位置 2、4 和 5 的干扰词“are”、“to”和“these”将被排除在全文索引外。但是会保留它们的位置信息,从而使短语中其他词的位置不受影响。
干扰词文件位于 $SQL_Server_Install_Path\Microsoft SQL Server\MSSQL.1\MSSQL\FTDATA\ 目录中。在安装带有全文搜索支持的 SQL Server 时会创建这个目录,并安装干扰词文件。可以对干扰词文件进行编辑,例如,高科技公司的系统管理员可以把“computer”一词添加到他们的干扰词列表中。
|
如果对干扰词文件进行了编辑,则必须重新填充全文目录,更改才能生效。 |
下表显示了干扰词文件及其相应的语言。
干扰词文件 |
语言 |
Noisechs |
简体中文 |
Noisecht |
繁体中文 |
Noisedan |
丹麦语 |
Noisedeu |
德语 |
Noiseeng |
英语(英国) |
Noiseenu |
英语(美国) |
Noiseesn |
西班牙语 |
Noisefra |
法语 |
Noiseita |
意大利语 |
Noisejpn |
日语 |
Noisekor |
朝鲜语 |
Noiseneu |
非特定语言 |
Noisenld |
荷兰语 |
Noiseplk |
波兰语 |
Noiseptb |
葡萄牙语(巴西) |
Noisepts |
葡萄牙语(伊比利亚) |
Noiserus |
俄语 |
Noisesve |
瑞典语 |
Noisetha |
泰语 |
Noisetrk |
土耳其语 |
全文搜索基础
本主题简要说明了与全文搜索相关的组件、进程和术语。全文搜索与 Microsoft SQL Server 共用了许多术语,但还是有一些术语(例如“爬网”和“标记”)是全文搜索特有的。
全文索引
在给定的列中存储有关重要的词及其位置的信息。可以利用这些信息快速计算全文查询,搜索包含特定词或词组的行。有关详细信息,请参阅全文索引。
全文目录
全文目录可以不包含全文索引,也可以包含数量不等的全文索引。全文目录必须驻留在与 SQL Server 实例相关联的本地硬盘上。每个目录可用于满足数据库内的一个或多个表的索引需求。除非附加了包含全文目录的只读数据库,否则不能将全文目录存储在可移动驱动器、软盘或网络驱动器上。
断字符
对于某种给定的语言,断字符可基于该语言的词汇规则对文本进行标记化。有关详细信息,请参阅断字符和词干分析器。
标记
是由断字符标识的词或字符串。
词干分析器
对于某种给定的语言,词干分析器可基于该语言的规则生成特定词的变形。词干分析器是针对特定语言的。有关详细信息,请参阅断字符和词干分析器。
筛选器
给出指定的文件类型(例如 .doc)后,筛选器就可以从存储在 varbinary(max) 或 image 列中的文件内提取文本。有关详细信息,请参阅筛选器。
填充或爬网
是创建和维护全文索引的过程。有关详细信息,请参阅全文索引的结构。
干扰词
经常出现但对搜索没有帮助的词。例如,在“英语”区域设置中,诸如“a”、“and”、“is”和“the”之类的词都被认为是干扰词。这些词将被忽略,以便精简全文索引。有关详细信息,请参阅干扰词。
全文搜索简介
使用全文搜索可以快速、灵活地为存储在 Microsoft SQL Server 数据库中的文本数据的基于关键字的查询创建索引。与仅适用于字符模式的 LIKE 谓词不同,全文查询将根据特定语言的规则对词和短语进行操作,从而针对此数据执行语言搜索。
在 Microsoft SQL Server 2005 中,全文搜索用于提供企业级搜索功能。由于在性能、可管理性和功能方面的显著增强,全文搜索可为任意大小的应用程序提供强大的搜索功能。
对大量非结构化的文本数据进行查询时,使用全文搜索获得的性能优势会得到充分的表现。对数百万行文本数据执行的 LIKE 查询可能需要花费几分钟时间才能返回结果;但对同样的数据,全文查询只需要几秒或更少的时间,具体取决于返回的行数。
可以对包含 char、varchar 和 nvarchar 数据的列创建全文索引。也可以对包含格式化二进制数据(如存储在 varbinary(max) 或 image 列中的 Microsoft Word 文档)的列创建全文索引。不能使用 LIKE 谓词来查询格式化的二进制数据。
若要对一个表创建全文索引,该表必须具有一个唯一且非空的列。例如,假设 Adventure Works 中的 Document 表具有全文索引,在该表中,DocumentID 列是主键列。全文索引表明,对于与 DocumentID 为 3 相关的行,在 DocumentSummary 列中词编号为 24 和 44 的位置找到了词“instructions”。此索引结构支持对包含索引词的所有项进行高效搜索,并支持高级搜索操作,例如短语搜索和邻近搜索。有关详细信息,请参阅Document 表 (AdventureWorks)。
在处理全文查询时,搜索引擎将满足搜索条件的行的键值返回给 SQL Server。如果要使用全文查询来查找包含“instructions”一词的文档,将从全文索引获得 DocumentID 值 3、4、6、7 和 8。SQL Server 随后使用这些键返回匹配的行。
全文搜索增强功能
Microsoft SQL Server 2005 在全文搜索中引入了多项改进和新功能。
全文搜索在以下几方面得到了增强。
主题 |
说明 |
本主题列出了对全文搜索的可编程性增强,如用于全文搜索的数据定义语言和在查询中指定非默认语言的功能。 | |
本主题列出了对全文搜索的可管理性增强,如并行安装、备份和还原全文目录以及附加和分离全文目录。 |
管理全文搜索
全文管理可分为四项主要任务:
· 创建全文索引和全文目录。
· 更改现有的全文索引和目录。
· 删除现有的全文索引和目录。
· 计划和维护索引填充。
全文管理可以在服务器、数据库、表和列级执行。在服务器级,可以设置服务器范围内的属性(例如 resource_usage)以增加或减少全文服务所使用的系统资源量。在数据库级,可以为数据库启用或禁用 Microsoft Full-Text Engine for SQL Server (MSFTESQL) 服务。在启用全文索引的数据库中,可以为多个全文目录之一创建和删除元数据。
|
在 Microsoft SQL Server 2005 中,所有数据库在默认情况下都支持全文索引。 |
在表级,可以启用或禁用表对全文查询的支持。如果表的全文定义被更改(例如,添加了一个需要创建索引以进行全文搜索的列),则需要重新填充关联的全文目录,以使全文索引与新的全文定义同步。在列级,可以添加或删除支持全文查询的列。
在了解如何创建全文索引之前,有必要知道它们与普通 SQL Server 索引的不同。下表列出了这些差别。
全文索引 |
普通 SQL Server 索引 |
存储在文件系统中,但通过数据库管理。 |
存储时受定义它们的数据库的控制。 |
每个表只允许有一个全文索引。 |
每个表允许有若干个普通索引。 |
将数据添加到全文索引(称为“填充”),可以通过计划或特定请求来请求填充,也可以在添加新数据时自动填充。 |
当插入、更新或删除作为其基础的数据时自动更新。 |
在同一个数据库内分组为一个或多个全文目录。 |
不分组。 |
在所有这些级别上,可使用工具检索元数据和状态信息。
与普通 SQL Server 索引一样,全文索引可以在相关表中的数据被修改时自动更新。另外,也可以按适当的间隔手动重新填充全文索引,但这可能会耗费大量时间和资源。因此,索引更新通常作为异步进程在数据库活动较少时在后台执行。
应当将具有相同更新特征的表(如更改次数少的与更改次数多的,或在一天中某个特定时段内频繁更改的表)组合在一起,并分配给同一个全文目录。通过这种方式设置全文目录填充计划,将使全文索引与表保持同步,且在数据库活动较多时不会对数据库服务器的资源使用产生负面影响。
在全文目录中安排表的全文索引的位置是非常重要的。将表分配给全文目录时,应注意下列基本原则:
始终选择可用于全文唯一键的最小唯一索引。(最好是 4 个字节、基于整数的索引。)这将显著减少文件系统中 Microsoft Search 服务所需要的资源。如果主键较大(超过 100 个字节),可以考虑选择表中的另一个唯一索引(或创建另一个唯一索引)来作为全文唯一键。否则,如果全文唯一键的大小超过所允许的最大值(900 个字节),全文填充将无法继续进行。
如果创建索引的表有成千上万行,请将该表分配给自己的全文目录。
应考虑要进行全文索引的表中发生的更改次数以及表的行数。如果要更改的总行数加上上次全文填充期间表中出现的行数达到了上百万,请将该表分配给自己的全文目录。
检查Full Text 全文索引的填充状态:
通常,如果正在进行完全填充,则返回的结果为 1。
SELECT FULLTEXTCATALOGPROPERTY('eWorkplaceFullText', 'Populatestatus')
更多详细情况请查看:全文检索