ms sql server 2000 全文索引

 

-(1)Microsoft 搜索服务

-(2)全文查询支持

-(3)全文目录和索引

-(4)全文查询构架

-(5)全文检索

-(6)全文索引

-(7)全文检索建议

-(8)如何启用数据库以进行全文索引(企业管理器)

-(9)安装全文索引服务

(1)Microsoft 搜索服务

Microsoft 搜索服务是一个全文索引和搜索引擎。

SQL-92 标准只定义了基本的字符搜索功能:

  • 检索等于、小于或大于一个字符常量的字符值。
  • 检索包含一个字符串模式的字符值。

通过 Microsoft 搜索服务,Microsoft® SQL Server™ 2000 和 SQL Server 7.0 版能够支持在字符串列上进行的更为复杂的搜索。

Microsoft 搜索服务包括两个角色:

  • 索引支持

    实现为数据库定义的全文目录和索引。接受全文目录以及各目录中组成索引的表和列的定义。执行填充全文索引的请求。

  • 查询支持

    处理全文检索查询。确定索引中满足全文选择条件的项。每一个符合选择条件的项都会向 SQL Server 服务返回行标识及等级值,这些信息将用于构造查询结果集。所支持的查询类型包括:

    • 检索词或短语。
    • 检索意思相近的词。
    • 检索动词和名词的屈折变化形式。

全文引擎以名为 Microsoft 搜索的服务在 Microsoft Windows NT® 或 Microsoft Windows® 2000 上运行。全文引擎在自定义安装过程中选择全文检索功能时安装。Microsoft 搜索服务本身并不安装在 Microsoft Windows 95 或 Microsoft Windows 98 上,但是 Windows 95 和 Windows 98 客户端在连接到运行 Windows NT 或 Windows 2000 的 SQL Server 安装时可以使用该服务。

Microsoft 搜索服务在本地系统帐户的环境中运行。在安装过程中,SQL Server 将自我添加为一个 Microsoft 搜索服务管理员。若要确保正确维护此关系,在更改 SQL Server 服务帐户信息时,都必须通过 SQL Server 企业管理器中"SQL Server 属性"对话框的"属性"选项卡来完成。

全文目录和索引不存储在 SQL Server 数据库内,而是存储在由 Microsoft 搜索服务单独管理的文件中。只有 Microsoft 搜索服务和 Windows NT 或 Windows 2000 系统管理员可以访问全文目录文件。

s1

(2)全文查询支持

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

s2

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

  1. 应用程序给 SQL Server 实例发送带全文构造的 Transact-SQL 语句。
  2. SQL Server 关系引擎通过查询系统表验证全文构造,确定全文索引是否覆盖列引用。关系引擎将每个 SQL 语句简化为一系列行集操作,并使用 OLE DB 将这些操作传递给基础组件,通常是存储引擎。关系引擎通过全文提供程序而不是存储引擎,将任何全文构造转换成对行集的请求。请求的行集是满足搜索条件和等级的键集,而这个等级表示每个键的数据满足搜索条件的程度。向全文提供程序发送的行集请求命令包括全文检索条件。
  3. 全文提供程序验证请求并将搜索条件更改为由Microsoft 搜索服务的查询支持组件使用的形式。将请求发送到搜索服务。
  4. 查询支持组件使用搜索引擎组件从全文索引析取所请求的数据。然后以行集的形式将这些数据传递回全文提供程序。
  5. 全文提供程序将这个行集返回给关系引擎。
  6. 关系引擎将它从存储引擎和全文提供程序收到的所有行集进行组合,以生成发送回客户端的最终结果集。

(3)全文目录和索引

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 随后使用键的列表来确定表中要处理的行。

(4)全文查询构架

Microsoft® SQL Server™ 2000 全文查询组件支持在字符串列上进行复杂搜索。

该项功能由 Microsoft 搜索服务实现,它具有两个作用:

  • 索引支持

    实现为数据库定义的全文目录和索引。接受全文目录以及各目录中组成索引的表和列的定义。执行填充全文索引的请求。

  • 查询支持

    处理全文检索查询。确定索引中满足全文选择条件的项。对于满足选择条件的每一项,它向 MSSQLServer 服务返回行标识外加一个等级值,MSSQLServer 服务将使用这些信息构造查询结果集。所支持的查询类型包括:

    • 检索词或短语。
    • 检索意思相近的词。
    • 检索动词和名词的屈折变化形式。

全文引擎作为 Microsoft Windows NT® Server、Windows NT Advanced Server、Windows® 2000 Server 或 Windows 2000 Advanced Server 上的 Microsoft 搜索服务运行。全文引擎在自定义安装过程中选择全文检索功能时安装。Microsoft 搜索服务本身并不在 SQL Server Desktop Engine 安装过程中安装。虽然这意味着 Microsoft Windows 95、Windows 98、Windows NT Workstation 或 Windows 2000 Professional 客户端上未安装 Microsoft 搜索服务,但是这些客户端可以在连接到 Server 2000 标准版、SQL Server 2000 程序员版或 SQL Server 2000 企业版的实例时使用该服务。

全文目录和索引不存储在 SQL Server 数据库内,而是存储在由 Microsoft 搜索服务单独管理的文件中。在 SQL Server 恢复过程中不恢复全文目录文件。也不能使用 Transact-SQL BACKUP 和 RESTORE 语句备份和还原它们。执行恢复或还原操作后,必须单独重新同步全文目录。只有 Microsoft 搜索服务和 Windows NT 或 Windows 2000 系统管理员可以访问全文目录文件。

SQL Server 与 Microsoft 搜索服务之间通过全文提供程序实现通讯。

Microsoft 搜索服务所支持的全文目录、索引和搜索只适用于 SQL Server 数据库内的表。Windows NT 索引服务和 Windows 2000 索引服务在操作系统文件上提供的功能相似。索引服务包括为 OLE DB 使用者提供的用于索引服务的 OLE DB 提供程序。SQL Server 应用程序可以通过分布式查询访问用于索引服务的 OLE DB 提供程序。Transact-SQL 语句可以通过使用全文 SQL 构造和用于索引服务的 OLE DB 提供程序的分布式查询引用,将引用 SQL Server 表的全文检索与文件数据的文本化搜索结合起来。有关更多信息,请参见文件数据的全文查询

在任何运行多个 SQL Server 实例的计算机上都只有一个 Microsoft 搜索服务。全文检索引擎的单个实例为计算机上的所有 SQL Server 2000 和 SQL Server 7.0 版实例管理全文索引。

(5)全文检索

一直以来,从数据库列或文件系统中检索特定文本数据曾经是麻烦且花销很大的过程,且经常需要借助第三方工具。

Microsoft® SQL Server™ 提供多文本数据检索系统。SQL Server 2000 提供了一种增强的全文检索服务,使您得以:

  • 在后台更新索引。

    填充或更新索引不必影响其它任务。可以在后台使用全文索引向导、SQL Server 企业管理器或 SQL Server 代理程序作业调度程序来调度全文索引更新。

  • 在全文索引的三种维护方法中选择一种。

    根据数据和资源情况,可在完全重建、基于时间戳的增量重建和更改跟踪这三种方法中选择一种来维护全文索引。完全重建方法涉及重新扫描所有行。基于时间戳的增量重建方法仅重新扫描自上次重建(完全重建或增量重建)索引后更改的行。通过使用更改跟踪方法,SQL Server 维护对索引数据的所有更改列表,可使用该列表更新全文索引。有关更多信息,请参见维护全文索引

  • image 列中存储的某些类型的数据进行索引和检索。

    使用全文检索,可以对 image 列中存储的某些类型的数据进行索引和查询。全文检索使用几种支持的筛选之一来解释这些数据并析取文本数据,以便进行索引和查询。SQL Server 提供用于 .doc、.xls、.ppt、.txt 和 .htm 文件扩展名的筛选。有关更多信息,请参见筛选支持的文件类型

    一旦对 image 列进行了索引,就可以使用检索谓词 CONTAINS 和 FREETEXT 检索该列。有关更多信息,请参见使用全文谓词查询 Image 列

  • 限制返回匹配的数量。

    当在查询中使用 CONTAINSTABLE 或 FREETEXTTABLE 行集函数的可选参数 top_n_by_rank 时,SQL Server 将只返回排在前面的若干匹配项,数量由上面的数字 n 所指定。有关更多信息,请参见使用 CONTAINSTABLE 和 FREETEXTTABLE 赋值行集函数中的"限制结果集"。

(6)全文索引

对 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 故障转移群集环境完全支持全文索引。有关更多信息,请参见在故障转移群集中运行全文查询

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

  • 可以从非活动的注册表中添加或除去支持全文查询的列。

在所有这些级别上,可使用工具检索元数据和状态信息。

和常规 SQL 索引一样,当在相关表中修改数据时,可自动更新全文索引。或者,也可以适当的间隔手工重新填充全文索引。这种重写可能既耗时又大量占用资源,因此,在数据库活动较少时,这通常是在后台运行的异步进程。

应将具有相同更新特性的表(如更改少的与更改多的,或在一天的特定时段内频繁更改的表)组合在一起,并分配给相同的全文目录。通过以此方法设置全文目录填充调度,使得全文索引和表保持同步,且在数据库活动较多时不对数据库服务器的资源使用产生负面影响。

为全文目录中的表安排全文索引的位置是非常重要的。在为全文目录指定表时,应该注意下列基本原则:

  • 始终选择可用于全文唯一键的最小唯一索引。(4 个字节且基于整数的索引是最佳的。)这将显著减少文件系统中 Microsoft 搜索服务所需要的资源。如果主键很大(超过 100 字节),可以考虑选择表中其它唯一索引(或创建另一个唯一索引)作为全文唯一键。否则,如果全文唯一键的大小达到允许的上限(450 字节),全文填充将无法继续进行。
  • 如果进行索引的表有成千上万行,请将该表指定给其自己的全文目录。
  • 应该考虑对其进行全文索引的表中发生的更改数以及表的行数。如果要更改的总行数,加上上次全文填充期间表中出现的行数达到成千上万行,请将该表指定给其自己的全文目录。

 

(7)全文检索建议

全文检索允许在 Microsoft® SQL Server™ 2000 表内对字符数据进行基于单词或短语的索引。全文检索由下面的基本组件组成:

  • 全文索引启用了全文目录的创建和填充,它们在 SQL Server 以外维护并且由 Microsoft 搜索服务管理。
  • 全文检索使用新的 Transact-SQL 谓词(CONTAINS、CONTAINSTABLE、FREETEXT 和 FREETEXTTABLE)来查询这些已填充的全文目录。
全文索引

如果正在对不到一百万行的表进行全文索引,那么几乎不需要进行性能优化。如果对大型 SQL Server 表(其中包含创建大型全文目录的上百万行)进行全文索引,那么这会持续进行大量的读取和写入活动,因此必须配置 SQL Server 和全文目录,以通过跨多个硬盘驱动器进行负载平衡来获得最优磁盘 I/O 性能。同时还需要考虑硬件配置、Microsoft Windows® 2000 或 Windows NT® 4.0 系统配置、SQL Server 2000 配置、全文目录和数据库文件的实际位置。

硬件考虑事项

  • 多个 CPU:一到四个 500 MHz Xeon III 处理器。
  • 内存:1 到 4 GB 的物理 RAM。
  • 具有几个通道的多磁盘控制器,或具有多通道的单磁盘控制器。
  • 磁盘 I/O 子系统:RAID0(没有容错保护的磁盘条带化)、RAID0+1 和 RAID5。

Windows 2000 或 Windows NT 4.0 系统配置的考虑事项

  • 如果在 Windows NT Server 4.0 上安装 SQL Server,那么 pagefile.sys 文件的大小需要设置为可用物理 RAM 量的 1.5 到 2 倍。在有较大 RAM 量的 Windows 2000 Server 上安装 SQL Server 时,可以不用考虑这一条。
  • Pagefile.sys 文件需要放置在它们自己的驱动器(RAID0 或 RAID0+1)上,最好在单独的控制器或至少是与共享控制器分离的单独通道上。

SQL Server 配置的考虑事项

  • 在大型表(超过一百万行)中进行完全填充后,考虑将新特性 Change Tracking Update Index in BackgroundUpdate IndexIncremental Population 一起使用。有关何时使用 Change TrackingTimestamp-based incremental 填充的更多信息,请参见维护全文索引

全文索引和目录考虑事项

  • 全文索引或填充全文目录应该在系统活动较少时进行,通常在数据库维护窗口完成。
  • 将全文目录文件放置在它自己的磁盘控制器上,或有多个通道的单个磁盘控制器上单独的通道中。
  • 将数据库文件放置在与全文目录文件不同的独立的磁盘控制器上,或有多个通道的单个磁盘控制器上单独的通道中。
  • 具有四百万或两千万行的 SQL 表的全文索引可能要花费几个小时或几天来完成。考虑知识库文章 Q240867 中提供的选项:"INF:如何移动、复制和备份 SQL 7.0 全文目录文件夹和文件"。
全文检索
  • 如果正在对不到一百万行的表进行全文检索,那么几乎不需要任何性能优化。(一百万行只是常规的分界点。)如果要对超过一百万行的表进行全文检索,请考虑适当的全文检索谓词(CONTAINS 与 CONTAINSTABLE 或 FREETEXT 与 FREETEXTTABLE)以及平均行数和查询超时的考虑事项。
  • 使用带有新的 top_n_by_rank 参数的 CONTAINSTABLE 或 FREETEXTTABLE 来限制返回的行数。top_n_by_rank 指定只返回以降序排列的前 n 个最高等级的匹配项。仅当指定了整数值 n 时应用。另外,应该考虑使用 TOP 子句来限制在 CONTAINTSTABLE 或 FREETEXTTABLE 的结果集中返回的行数。请查阅知识库文章 Q240833:"FIX:通过支持 TOP 改善全文检索性能",以获得更多信息。

    如果试图通过附加的 WHERE 子句限制从全文查询得到的结果,那么 WHERE 子句是在与 SQL 表结果联接 (JOIN) 之后而非之前应用。否则,结果集会不正确,因为合格的行会从结果集中省略掉,而没有任何对客户端的提示。若要限制全文检索查询的结果,请使用 CONTAINSTABLE 或 FREETEXTTABLE 谓词中的 Top_N_Rank 参数。

  • 如果通过 Web 或 Microsoft Internet Information 服务 (IIS) 接口使用 SQL Server 全文检索,并且正在搜索大型表(超过一百万行),那么当使用 CONTAINS 或 FREETEXT 谓词时,请考虑将 IIS 查询超时默认值增加 20 秒到 30 秒。
  • 如果在 SQL 查询中使用多个 CONTAINS 或 FREETEXT 谓词,并发现全文检索查询性能较差,请减少 CONTAINS 或 FREETEXT 谓词的数量,或使用"*"在查询中使用所有全文索引列。

    在全文查询中使用任何一个全文谓词时,例如 CONTAINS (pr_info, 'between AND king'),还可能遇到错误 7619:"查询只包含忽略的单词"。单词"between"是一个忽略词或干扰词,即使带有 OR 子句,全文查询语法分析器也会将其视为一个错误。考虑将查询重新写为基于短语的查询并删除干扰词,或考虑知识库文章 Q246800 中提供的选项:"INF:正确分析 FTS 查询中的引号"。还请考虑使用 Windows 2000 Server:它对索引服务的断词文件有一定增强。

  • 什么是 RANK 以及当与 CONTAINSTABLE 和 FREETEXTTABLE 谓词一起使用时如何确定 RANK?全文 RANK 值是根据包含唯一词的行出现的频率确定的。在确定返回行的 RANK 值中发挥作用的一个因素是这个唯一词在该行的全文索引列中出现的频率。另一个因素是唯一词在表中出现的总次数(这用于规范化概率)。结果集中返回的 RANK 值是互相关联的。因此,不可能将 RANK 值解释为百分比,或将 RANK 值分组为高/中/低范围。请将 RANK 视为一种对特定查询和结果集排序的方法。

当确定是在一个全文目录中包括多个 SQL 表,还是每个全文目录一个 SQL 表时,还有一些全文索引和检索的考虑事项。当考虑大型 SQL 表的这种设计问题时,在性能和维护之间应进行权衡,而您可能希望对您的环境测试这两种选项。如果选择在一个全文目录中有多个 SQL 表,则会因运行全文检索查询时间较长而带来开销,因为增量填充会强制所有其它 SQL 表的全文索引都放在该全文目录中。如果选择每个全文目录具有一个单独的 SQL 表,并对多个 SQL 表进行全文索引,就会引起维护单独的全文目录的开销(每个服务器总共只能有 256 个全文目录)。

(8)如何启用数据库以进行全文索引(企业管理器)

启用数据库以进行全文索引

  1. 展开服务器组,然后展开服务器。
  2. 展开"数据库"文件夹,然后单击要启用的数据库。
  3. 在"工具"菜单上单击"全文索引"命令。
  4. 完成全文索引向导的各步骤。
  5. (9)安装全文索引服务

  6.   晕了好久,网上说的什么Custom Install 我找了半了不晓得在哪里。

  7. 终于自己还是试出来了。

  8.   a.运行安装程序->安装sql server 2000组件-安装数据库服务器->…->对现有sql server实例升级…->向现有…->勾上全文检索->下一步。。。等.等.等.->完成s-install1

    1.   b.SQL SERVER 服务管理器中【服务】选择[Microsoft Search].如果该服务运行正常,就可以去企业管理器中选择一个数据库->工具->全文索引.yeah,全文索引服务可以用了。

    2.  

    3. s-install2

    4. 一下是网上抄的。

    5.  

  9. 对表设置全文索引应用如下步骤:

    1.选择要建立全文索引的表,然后选择: Full-Text Index Table ->Define Full-Text Indexing on a table

    2.系统会启动SQL Server Full-Text Index 向导。

    3.选择一个唯一索引。

    4.选择一个要建立索引的字段。

    5.选择catalog。

    6.选择更新索引计划(由于全文索引和普通索引表不同,不能自动更新,所以得加入一个计划

    )。

    7.Finish。

    8.选择在数据库Full-text catalogs中里的新建立的catalog,然后运行Start Population,Full Population 就可以了.

继续。。

右键catalog,启用完全填充。可以把东西填进去了。。。。

Yeah .可以开始写sql 语句了。

pubs 表

SELECT * FROM titles
WHERE CONTAINS (type,'business')

我的第一条成功的全文搜索语句。。。。。找出了四条

SELECT * FROM titles
WHERE CONTAINS (type,'"b*"')

SQL Server 2000提供的全文检索语句主要有CONTAINS和FREETEXT。CONTAINS语句的功能是在表的所有列或指定列中搜索:一个字或短语;一个字或短语的前缀;与一个字相近的另一个字;一个字的派生字;一个重复出现的字。

FREETEXT语句的功能是在一个表的所有列或指定列中搜索一个自由文本格式的字符串,并返回与该字符串匹配的数据行。所以,FREETEXT语句所执行的功能又称做自由式全文查询。

原文地址:https://www.cnblogs.com/chinaniit/p/1511158.html