使用SQL SERVER 2000的全文检索功能

使用 SQL SERVER 2000 的全文检索功能

步骤:

1、 打开 NorthWind 数据库,右键 Products 表,选择“全文索引表”,“在表上定义全文索引”,为其创建全文目录。在“全文索引向导”中,选择你需要全文查询条件的列(可以是文本或图像),我们选择 Productname 和 QuantityPerUnit 列。然后下一步,输入一个新的目录 proCatalog ,点击下一步。在填充调度一项里,我们暂时不建立填充调度。接着“下一步”,全成全文索引向导。完成后,我们可以看到在“全文目录”里,多了一个全文目录 proCatalog 。右键 proCatalog 属性,可以看到其状态、表、调度情况。

2、 右键全文目录 proCatalog , “启动完全填充”,系统会出现“全文目录填充成功启动”。

3、 这时,我们可以使用 Transact-SQL 进行全文检索了,我们使用 CONTAINS 、 FREETEXT 等谓词。如:

检索 ProductName 中,即包含 b 又包含 c 的所有列

SELECT *

FROM Products

WHERE CONTAINS(ProductName, '"c*" and "b*" ')

检索 ProductName 中,即包含 chai chang tofu 之一的所有列

SELECT *

FROM Products

WHERE FREETEXT(ProductName, 'chai chang tofu ')

我们还可以使用 CONTAINSTABLE 、 FREETEXT TABLE 等

4、 我们可以用 .NET 创建 WEB 或 Form 客户端,提供一个良好的全文检索界面,使自己的应用程序得到扩展

参考:

全文查询有关的系统存储过程

( 1 )启动数据库的全文处理功能( sp_fulltext_datebase );
( 2 )建立全文目录( sp_fulltext_catalog );
( 3 )在全文目录中注册需要全文索引的表( sp_fulltext_table );
( 4 )指出表中需要全文检索的列名( sp_fulltext_column )
( 5 )为表创建全文索引( sp_fulltext_table );
( 6 )填充全文索引( sp_fulltext_catalog )。

全文查询支持

Microsoft® SQL Server™ 2000 在接收带全文构造的 Transact-SQL 语句时,使用全文提供程序从 Microsoft 搜索服务检索所需信息。全文构造是 CONTAINS 或 FREETEXT 谓词,或者是 CONTAINSTABLE 或 FREETEXTTABLE 行集函数。如果不知道包含搜索条件的列,全文构造可以在全文索引中引用多列。该进程的流程如下图所示。

这一进程涉及的步骤包括:

应用程序给 SQL Server 实例发送带全文构造的 Transact-SQL 语句。

SQL Server 关系引擎通过查询系统表验证全文构造,确定全文索引是否覆盖列引用。关系引擎将每个 SQL 语句简化为一系列行集操作,并使用 OLE DB 将这些操作传递给基础组件,通常是存储引擎。关系引擎通过全文提供程序而不是存储引擎,将任何全文构造转换成对行集的请求。请求的行集是满足搜索条件和等级的键集,而这个等级表示每个键的数据满足搜索条件的程度。向全文提供程序发送的行集请求命令包括全文检索条件。

全文提供程序验证请求并将搜索条件更改为由 Microsoft 搜索服务的查询支持组件使用的形式。将请求发送到搜索服务。

查询支持组件使用搜索引擎组件从全文索引析取所请求的数据。然后以行集的形式将这些数据传递回全文提供程序。

全文提供程序将这个行集返回给关系引擎。

关系引擎将它从存储引擎和全文提供程序收到的所有行集进行组合,以生成发送回客户端的最终结果集。

全文目录和索引

Microsoft® SQL Server™ 2000 全文索引为在字符串数据中进行复杂的词搜索提供有效支持。全文索引存储关于重要词和这些词在特定列中的位置的信息。全文查询利用这些信息,可快速搜索包含具体某个词或一组词的行。

全文索引包含在全文目录中。每个数据库可以包含一个或多个全文目录。一个目录不能属于多个数据库,而每个目录可以包含一个或多个表的全文索引。一个表只能有一个全文索引,因此每个有全文索引的表只属于一个全文目录。

全文目录和索引不存储在它们所属的数据库中。目录和索引由 Microsoft 搜索服务分开管理。

全文索引必须在基表上定义,而不能在视图、系统表或临时表上定义。 全文索引的定义包括:

能唯一标识表中各行的列(主键或候选键),而且不允许 NULL 值。

索引所覆盖的一个或多个字符串列。

全文索引由键值填充。每个键的项提供与该键相关联的重要词(干扰词或终止词除外)、它们所在的列和它们在列中的位置等有关信息。

格式化文本字符串(如 Microsoft® Word™ 文档文件或 HTML 文件)不能存储在字符串或 Unicode 列中,因为这些文件中的许多字节包含不构成有效字符的数据结构。数据库应用程序可能仍需要访问这些数据并对其应用全文检索。因为 image 列并不要求每一字节都构成一个有效字符,所以许多站点将这类数据存储在 image 列中。 SQL Server 2000 引入了对存储在 image 列中的这些类型的数据执行全文检索的能力。 SQL Server 2000 提供筛选,可从 Microsoft Office™ 文件( .doc 、 .xls 和 .ppt 文件)、文本文件( .txt 文件)及 HTML 文件( .htm 文件)中析取文本化数据。设计表时除包括保存数据的 image 列外,还需包括绑定列来保存存储在 image 列中的数据格式的文件扩展名。可以创建引用 image 列和绑定列的全文索引,以便在存储于 image 列中的文本化信息上启用全文检索。 SQL Server 2000 全文检索引擎使用绑定列中的文件扩展名信息,选择从列中析取文本化数据的合适的筛选。

全文索引是用于执行两个 Transact-SQL 谓词的组件,以便根据全文检索条件对行进行测试:

CONTAINS

FREETEXT

Transact-SQL 还包含两个返回符合全文检索条件的行集的函数:

CONTAINSTABLE

FREETEXTTABLE

SQL Server 在内部将搜索条件发送给 Microsoft 搜索服务。 Microsoft 搜索服务查找所有符合全文检索条件的键并将它们返回给 SQL Server 。 SQL Server 随后使用键的列表来确定表中要处理的行。

全文索引

对 Microsoft® SQL Server™ 2000 数据的全文支持涉及两个功能:对字符数据发出查询的能力和创建及维护基础索引以简化这些查询的能力。

全文索引在许多地方与普通的 SQL 索引不同。

普通 SQL 索引

|

全文索引

---|---

存储时受定义它们所在的数据库的控制。

|

存储在文件系统中,但通过数据库管理。

每个表允许有若干个普通索引。

|

每个表只允许有一个全文索引。

当对作为其基础的数据进行插入、更新或删除时,它们自动更新。

|

将数据添加到全文索引称为填充,全文索引可通过调度或特定请求来请求,也可以在添加新数据时自动发生。

不分组。

|

在同一个数据库内分组为一个或多个全文目录。

使用 SQL Server 企业管理器、向导或 Transact-SQL 语句创建和除去。

|

使用 SQL Server 企业管理器、向导或存储过程创建、管理和除去。

这些差异使大量管理任务变得不可缺少。全文管理是在几个层次上实施的:

服务器

可以对服务器范围的某些属性(如 resource_usage )加以设置,以便增加或减少全文服务所使用的系统资源数量。

说明 全文引擎作为名为 Microsoft 搜索的服务在 Microsoft Windows NT® Server 和 Microsoft Windows® 2000 Server 上运行。对于 Microsoft SQL Server 个人版, Microsoft 搜索服务不可用。尽管这意味着 Microsoft 搜索服务既未安装在 Microsoft Windows 95/98 上,也未安装在 Windows NT 工作站或 Windows 2000 Professional 客户端上,但这些客户端在连接到 SQL Server 标准版安装或企业版实例时可以使用这项服务。

数据库

必须启用数据库才能使用全文服务。可以在已启用的数据库中创建和除去一个或多个全文目录的元数据。

全文目录

全文目录包含数据库中的全文索引。每个目录可以用于数据库内的一个或多个表的索引需求。该目录中的索引是使用这里介绍的管理功能来填充的。(全文目录必须驻留在与 SQL Server 实例相关联的本地硬盘驱动器上。不支持可移动的驱动器、软盘和网络驱动器)。在每个服务器上最多可创建 256 个全文目录。

说明 Windows NT 故障转移群集环境完全支持全文索引。有关更多信息,请参见 在故障转移群集中运行全文查询 。

首先,必须为全文支持启用表。然后,为与该表相关联的全文索引创建元数据(如表名及其全文目录)。表启用后,可以用为全文支持而启用的列中的数据填充它。如果表的全文定义被更改(例如,添加一个也将为全文检索而索引的新列),则必须重新填充相关的全文目录以使全文索引与新的全文定义同步。 </o:

Published At
Categories with Web编程
Tagged with
comments powered by Disqus