网络编程
位置:首页>> 网络编程>> 数据库>> 使用Microsoft SQL Server 2000全文搜索功能构建Web搜索应用程序

使用Microsoft SQL Server 2000全文搜索功能构建Web搜索应用程序

  发布时间:2008-09-29 12:32:00 

标签:SQL,Server,2000,全文,检索,搜索,数据库

[摘要]了解如何充分利用SQL Server 2000的全文搜索功能。本文包含有关实现最大吞吐量和最佳性能的几点提示和技巧。

概述

使用Microsoft© SQL Server 2000的全文搜索功能,可以对在非结构化文本数据上生成的索引执行快速、灵活的查询。常用的全文搜索工具是网站的搜索引擎。为了帮助读者理解全文搜索功能的最佳使用方法,本文介绍了大量抽象概念,并对优化全文索引和查询以实现最大吞吐率和最佳性能,提供了几点提示和技巧。

全文搜索功能简介

    在SQL Server 7.0中就引入了全文搜索功能。全文搜索的核心引擎建立在Microsoft Search (MSSearch)技术基础之上,在Microsoft Exchange和Microsoft SharePoint Portal Server等产品中也采用了此项技术。

    SQL Server 7.0全文搜索中公开的功能可提供基本的文本搜索功能,并使用早期版本的MSSearch。而SQL Server 2000的全文搜索实现则包含一组可靠的索引和查询功能,并在SQL Server 7.0的基础之上添加了几项增强功能。这些增强功能包括:通过Microsoft群集服务完全支持群集操作,能够过滤和索引IMAGE列中存储的文档,提供改进的语言支持,以及在性能、可伸缩性和可靠性方面进行了改进。

    MSSearch生成、维护和查询文件系统中(而不是SQL Server中)存储的全文索引。MSSearch进行全文索引时使用的逻辑和物理存储单元是目录。全文目录在每个数据库中包含一个或多个全文索引—可以为SQL Server中的每个表创建一个全文索引,且索引中可以包含该表中的一列或多列。每个表只能属于一个目录,且每个表只能创建一个索引。我们将简单介绍有关组织全文目录和索引的最佳方案—但首先,让我们来简单了解一下全文搜索的工作原理。
配置全文搜索功能

    要为SQL Server中存储的文本数据创建全文索引,应该先完成以下几步准备工作。第一步是以全文方式启用包含要生成索引的文本数据的数据库(如果您尚未执行此操作)。

    注:执行以下语句将丢弃并重新创建属于要启用全文搜索的数据库的所有全文目录。除非要重新创建全文目录,否则请确保在要启用的特定数据库中未创建任何全文目录。

    如果您是sysadmin角色的成员或此数据库的db_owner,可以继续进行并发出以下语句:

use Northwind
exec sp_fulltext_database 'enable'

接下来,您需要创建全文目录,以存储全文索引。正如前面所提到的,此目录中的数据存储在文件系统中(而不是SQL Server中),因此,在考虑全文目录的存储位置时应该仔细选择。除非指定其他位置,否则全文目录将存储在FTDATA目录(位于Microsoft SQL Server\MSSQL存储位置中)的子目录中。以下是在非默认位置创建全文目录的方法:

exec sp_fulltext_catalog 'Cat_Desc', 'create', 'f:\ft'

在本例中,全文目录将创建为“f:\ft”的子目录,如果您查看文件系统的该部分,将看到它有了自己的目录。MSSearch使用的全文目录的命名规则是:

SQL+dbid+catalogID

    目录ID从00005开始,并且每新建一个目录就递增1。

    如果可能的话,最好在其所在的物理驱动器上创建全文目录。如果生成全文索引的进程需要进行大量的I/O操作(从更高的层面来讲,就是从SQL Server中读取数据,然后向文件系统写入索引),则应避免使I/O子系统成为瓶颈。

    那么,全文目录有多大呢?通常情况下,全文目录的系统开销比SQL Server中存储的数据(对其进行全文索引)量高出大约30%;但是,此规则取决于数据中唯一单词(或主键)的分布,以及被您视为是干扰词的单词的分布。干扰词(或终止词)是指要排除在全文索引和查询以外的词语(因为它们不是您感兴趣的搜索词,而且出现频率很高,所以只会使索引变得很大,而不会有实际效果)。稍后,我们将介绍有关干扰词选择方面的注意事项,以及如何优化干扰词以改善查询性能。

    如果您尚未执行此操作,请在每个要生成全文索引的表上创建一个唯一的单列非空索引。这个唯一索引用于将表中的每一行映射到MSSearch内部使用的一个唯一可压缩主键。接下来,您需要让MSSearch知道您要为表创建全文索引。对表发出以下语句可将该表添加到所选的全文目录中(在本例中,它是我们在前面创建的“Cat_Desc”):

exec sp_fulltext_table 'Categories', 'create', 'Cat_Desc',
'PK_Categories'

下一步是向此全文索引添加列。您可以为每一列选择一种语言,如果该列的类型为IMAGE,则必须再指定一列,以指示IMAGEE列的每一行中存储的文档类型。

    在列语言选择方面,有一些重要但尚未文档化的注意事项。这些注意事项与文本的标记方式以及MSSearch对文本的索引方式有关。被索引的文本是通过一个称作单词分隔符(用作单词边界标记)的组件提供的。在英文中,这些单词边界通常是空格或某种形式的标点符号;而在其他语言中(例如德语),单词或字符可以组合在一起;因此,所选的列语言应表示要存储在该列的行中的语言。如果不确定,最好的方法通常是使用中性单词分隔符(只使用空格和标点符号执行标记功能)。选择列语言的另一个好处是“寻根溯源”。全文查询中的寻根溯源是指在特定语言中搜索某一单词的所有变化形式的过程。

    选择语言的另一个考虑因素与数据的表示方法有关。对于非IMAGE列数据来说,不需要执行特殊的过滤操作;而文本通常需要将单词分隔组件按原样传递。单词分隔符主要用于处理书面文本。因此,如果文本中有任何类型的标记(例如HTML),则在索引和搜索过程中,语言精确性将不会很高。这种情况下,您有两种选择—首选方法是只将文本数据存储在IMAGE列中,并指明其文档类型,以便对其进行过滤。如果不选择此方法,则可以考虑使用中性单词分隔符,并且可能的话,在干扰词列表中添加标记数据(例如HTML中的“br”)。在指定了中性语言的列中不能进行任何基于语言的寻根溯源,但有些环境可能会要求您选择此方法。

    在知道列选项后,通过发出以下语句在全文索引中添加一列或两列:

exec sp_fulltext_column 'Categories', 'Description', 'add'

 您可能注意到,此处未指定任何语言—这种情况下,将使用默认的全文语言。可以通过系统存储过程“sp_configure”为服务器设置默认全文语言。

    将所有列添加到全文索引后,即可执行填充操作。填充方法之多实在是不胜枚举,此处不作详细介绍。在本例中,只需对表启动完全填充,并等待它执行完毕:

exec sp_fulltext_table 'Categories', 'start_full'

您可能希望使用FULLTEXTCATALOGPROPERTY或OBJECTPROPERT函数来监视填充状态。要获取目录填充状态,可以执行:

select FULLTEXTCATALOGPROPERTY('Cat_Desc', 'Populatestatus')

通常情况下,如果完全填充正在进行,则返回的结果是“1”。

0
投稿

猜你喜欢

  • 刚刚换用windows7 64位旗舰版,使用其自带的iis7作为调试工具,今天调试一个ASP+ACCESS的网站的时候遇到了“ADODB.C
  • 在浏览几个网页时,发现有几个网站在显示时间时存在问题,比如今天是2009年1月4日,但是有的网站上却赫然写着今天是109年1月4日(这里有个
  • SQL Server 2000使得以XML导出数据变得更加简单,但在SQL Server 2000中导入XML数据并对其进行处理则有些麻烦。
  • 嘀咕嘀咕: 每次写文章往往开头是最难的,总想给UED读者不同的sense。就像我们设计产品总是想迎合我们的用户,最后觉得好似跟在用户后面狂奔
  • 大家都在关注视觉的盛宴,西方的美学;今天就分享下,中国最为古老的美,也是身边随处可见的美学–中国汉字书法之美;古文者,仓颉做造也。仰观奎星园
  • 从MySQL 5.0 开始,支持了一个全新的SQL句法:PREPARE stmt_name FROM preparable_stmt;EXE
  • 有时一些网页对源码进行了加密,我们很难找到类似像“onselectstart="return false"”这样的代码,
  • 虽然说标题将的是首页的访问感受,但是同样适合于网站其它页面的用户体验设计,一个好的网站设计应当尽量做到首页和次页一视同仁。第一步(视觉设计)
  • 第一章:基本的圆角框第二章:透明圆角化背景图片第三章:圆角化图片 第四章:CSS圆角框组件 V1.0序言:在我的文章《超圆滑圆角框的半完美解
  • 为了防止再次被攻击,做个验证码过滤程序是必要的。我在网上找了一些资料,觉得用别人做好的代码总是很不爽,自己做麻又不会写复杂的代码,特别是生成
  • 1、之前那个说淘宝交易评价“有问题”的文章已经有了一百多个评论。(某些开口就骂的评论已被删除)近期去评论的人都是从搜索引擎过来的,他们不是产
  • 首先,建一个文件夹,把你要隐藏的文件放在里面,你的所有黑客程序什么的。假设你建的文件夹叫hacker然后呢,我们给这个文件夹加个扩展名(后缀
  • 一、偏好资源的积累利用DreamWeaver 4制作网页会应用到许多各种类型的要素,比如色彩、图片、模板、脚本等。利用站点资源面板将这些东东
  • 以下所有代码全是在<head>...</head>之间,具体内容有:1,<title>…</tit
  • 在对跨多个表格的数据进行组合时,有时很难搞清楚要使用哪一个SQL句法。我将在这里对将多个表格中的查询合并至单一声明中的常用方式进行阐述。在这
  • 背景:pony是公司的首席体验官、首席产品经理。这次在产品峰会上pony将自己平时经验的积累与大家交流,体验较细。这次分享研发管理部,设计中
  • 原理:自定义javascript中的oncontextmenu事件,然后使用div层模拟菜单。知道了这个原理结合美工相信你可以做出很漂亮的自
  • 这段时间在处理SQL server 2000 SP4补丁打不上的问题上花了不少时间,回头想想应该总结一下:系统说明:dell1800服务器,
  • 标志是一种简单的工具,就象铁锤,简单实用。如果一种工具功能太多导致其效用减弱,那就让它保持简单。你并不需要一把有太多装饰的精美铁锤。对于象征
  • 在这系列视觉设计的文章间隙插一篇字体单位的文章。前文说了,字体单位应该用em而不用px,原因简单来说就是支持IE6下的字体缩放,在页面中按c
手机版 网络编程 asp之家 www.aspxhome.com