简介
这篇文章是全文搜索功能的SQL Server 2000(2005)。它是一个易于使用,速度非常快,可扩展的解决方案索引和搜索文件"内容的各类的。例如在Word,Excel中,Adobe的便携文档格式(PDF)和HTML文件。先决条件
通过这个例子,你需要的Microsoft SQL Server 2000服务器(至少)访问,数据库DB权利人,当然客户端工具。创建表
为了存储在数据库表中的索引文件,我们要创建两个表中的字段。第一个领域,我们将存储二进制格式的文件的内容,在第二,我们将存储该文件的扩展,例如quot;。docquot或quot;。xlsquot;。
这是一个好主意存储的全名和文件的大小信息,因为可能你需要在这些实际情况,但你不会需要全文索引。
存储的文件的大小可以是可选的,因为你可以查询,但是这可能需要很长一段时间,远远长于从一个字段读取这些值。
所以我们创建表的脚本可以:CREATE TABLE [dbo].[Doc] (
[ID] uniqueidentifier ROWGUIDCOL NOT NULL ,
[Extension] [varchar] (10) NOT NULL ,
[Content] [image] NOT NULL ,
[FileSize] [int] NOT NULL ,
[FileName] [nvarchar] (500) NOT NULL ,
[Stamp] [timestamp] NOT NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
ALTER TABLE [dbo].[Doc] WITH NOCHECK ADD
CONSTRAINT [PK_Doc] PRIMARY KEY CLUSTERED
(
[ID]
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[Doc] ADD
CONSTRAINT [DF_Doc_ID] DEFAULT (newid()) FOR [ID]
GO
一个简单的想法是使用一个唯一的标识符类型的文件表的主键。它可以在许多情况下非常有用,如果你是一名Web开发人员。也许你想使用这个ID的URL(查询字符串),当你做出一个下载页面,你不想给机会你的用户下载的所有文件,没有看到您的广告, 等只需在URL的末尾增加一个参数。
请注意,已被该脚本创建一个主键。它始终是非常重要的,因为这样可以保证,你不能两个记录插入到数据库中(表是一组记录相同的ID,你不能使具有相同值的记录之间的差异,除了使用游标)和良好的聚集索引,才能真正提高SELECT语句的性能。
此外,有一个时间戳字段??所谓的邮票??在桌子上。这将是我们有必要,我们会谈论它。创建全文索引
我认为没有人知道正确的格式的全文索引头创建语句。因此,我们将创建此指数从Microsoft SQL Server企业管理器。
首先选择您的服务器,那么你的数据库。选择然后在右侧搜索,为您创建的表(DOC)的表。
右击表后,选择quot;上tablequot定义全文索引;子菜单,从quot;全文索引tablequot;菜单。{S0}
在这之后,一个向导将出现。
的quot;选择指数stepquot;,选择主键。后来,当我们查询表,我们将取回结果从全文搜索引擎(唯一的)索引的值。
在quot;选择表Columnsquot;,加强商标的quot; Contentquot;列,行,在文件类型列,选择领域的延伸。然后一步之遥到另一行,因为"下一步"按钮将被激活后,才改变选择。
在这一步,我们给了服务器的可转位列,并定义每个文件的类型。
在quot;选择一个Catalogquot;一步,你可以创建一个新的全文检索目录或选择一个现有的。我给您一个新的目录,对这些数据,因为所收集的索引可以是巨大的,如果文件数增加。
在quot;选择或创建人口Schedulesquot;,你可以安排的增量和目录或表的全部人口。你可以让它空在这种情况下,因为我们将使用更改跟踪功能的SQL Server。这意味着,我们告诉SQL服务器更新其文本目录quot; immediatelyquot;插入或更新后发生。
在实际情况中,它一般是每星期或每天提供一个完整的人口和增量每天或更频繁,但它取决于你的服务器的利用率。
的原因是,更改跟踪和增量更新功能不承认,如果有人使用WRITETEXT或UPDATETEXT语句。
当我们在设计表的时候,我们已经投入一个时间戳字段。增量索引更新时间戳字段是需要的,没有该领域的所有增量更新做全面的更新。全文索引引擎可以找到此属性的更改更新。这是因为WRITETEXT和UPDATETEXT语句是没有注意到的全文检索引擎。这些陈述不更新像正常插入的时间戳字段和更新做。
所以完成该向导,按下一步buttonnbsp;几次,然后完成。
已定义的全文索引后,我们必须将更改跟踪功能。我们可以通过右击在企业管理中的表名,然后选择更改跟踪然后quot;更新backgroundquot指数;从全文索引表菜单。从这个时候,全文索引引擎将改变观看我们的表,并更新其索引,如果必要。
我们的索引创建的一个有趣的结果:{C}测试
现在我们插入一些记录,然后我们创建一个选择查询。让我们在查询分析器中运行此插入脚本:INSERT INTO [DOC] ([Extension], [Content], [FileSize], [FileName])
VALUES ('.txt', 'Hello John! It''s me: Garfield!', 30, 'Cartoon1.txt')
INSERT INTO [Doc] ([Extension], [Content], [FileSize], [FileName])
VALUES ('.txt', 'Oh my god!', 30, 'Shout.txt')
INSERT INTO [DOC] ([Extension], [Content], [FileSize], [FileName])
VALUES ('.txt', 'NOWAN's web site: "%22http://www.nowan.hu/'%22">http://www.nowan.hu/', 30, 'nowan.txt')
这些都是简单的插入, 您可以检查自己。后插入的记录,你可以运行一个SELECT语句检查表:
全文搜索SELECT * FROM [Doc]
要创建一个全文检索查询,您可以得到与未来报表更接近:
前两个语句有两个参数。首先是列名,第二个是搜索的字符串。这些职能还给布尔值。
第二个语句更有趣。这些函数返回的表有两列:KEY和RANK。这意味着,我们可以得到搜索记录或记录的唯一的ID,我们也可以回去的命中率(等级):SELECT * FROM ContainsTable([doc], Content, '"nowan"')
CONTAINSTABLE和FREETEXTTABLE的另一个特点是,你可以给难以搜索的字符串表达式。例如,您可以使用quot; ORquot;和"; ANDquot;逻辑:{S3}
当然,这些语句的结果表中可以加入真正的表。因此,如果我们想从原始表中的原始数据行,我们可以使用这样的SELECT语句:
索引的文件类型SELECT Doc.* FROM [Doc]
INNER JOIN ContainsTable([doc], Content, '"nowan"') AS FT
ON Doc.ID = FT.[Key]
的SQL Server创建索引通常从文本文件和Microsoft Office文件。这类型"列表中的IFilter扩展的设计为旧索引服务。您也可以从Adobe的IFilter索引PDF文件。匈牙利文版
您可以找到匈牙利文版的这篇文章{A6}。