使用Microsoft2000的全文搜索功能构建Web搜索应用程序

来源:互联网 发布:400电话软件 编辑:程序博客网 时间:2024/05/17 08:17
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 728x15, 创建于 08-4-23MSDN */google_ad_slot = "3624277373";google_ad_width = 728;google_ad_height = 15;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 160x600, 创建于 08-4-23MSDN */google_ad_slot = "4367022601";google_ad_width = 160;google_ad_height = 600;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
使用MicrosoftSQLServer2000的全文搜索功能构建Web搜索应程序
AndrewB.Cencini
MicrosoftCorporation
2002年12月


适用于:
    Microsoft®SQL™Server2000

摘要:学习如何充分利用SQLServer2000的全文搜索功能。本文包含有关实现最大吞吐率和最佳性能的几点提示和技巧。
目录简介全文搜索功能简介配置全文搜索功能全文查询排位和优化其他性能技巧小结附录A:实现全文搜索功能的最佳选择附录B:使用最佳选择、结果分页和有效全文查询逻辑的示例应用程序附录C:资源简介
使用Microsoft®SQL™Server2000的全文搜索功能,可以对在非结构化文本数据上生成的索引执行快速、灵活的查询。常用的全文搜索工具是的。为了帮助读者理解全文搜索功能的最佳使用方法,本文介绍了大量抽象概念;并对优化全文索引和查询以实现最大吞吐率和最佳性能,提供了几点提示和技巧。
全文搜索功能简介
全文搜索功能在SQLServer7.0中引入。全文搜索的核心引擎建立在MicrosoftSearch(MSSearch)技术上,MicrosoftExchange和MicrosoftSharePoint™PortalServer等产品中也采用了此项技术。

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

MSSearch生成、维护和查询文件系统中(而不是SQLServer中)存储的全文索引。MSSearch进行全文索引时使用的逻辑和物理存储单元是目录。全文目录在每个中包含一个或多个全文索引-可以为SQLServer中的每个表创建一个全文索引,且索引中可以包含该表中的一列或多列。每个表只能属于一个目录,且每个表只能创建一个索引。我们将简单介绍有关组织全文目录和索引的最佳方案-但首先,让我们来简单了解一下全文搜索的工作原理。
配置全文搜索功能
要为SQLServer中存储的文本数据创建全文索引,应该先完成以下几步准备工作。第一步是以全文方式启用包含要生成索引的文本数据的数据库(如果您尚未执行此操作)。
注意:执行以下语句将丢弃并重新创建属于要启用全文搜索的数据库的所有全文目录。除非要重新创建全文目录,否则请确保在要启用的特定数据库中未创建任何全文目录。
如果您是sysadmin角色的成员或此数据库的db_owner,可以继续进行并发出以下语句:

useNorthwindexecsp_fulltext_database'enable'

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

execsp_fulltext_catalog'Cat_Desc','create','f:/ft'

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

SQL+dbid+catalogID

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

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

那么,全文目录有多大呢?通常情况下,全文目录的系统开销比SQLServer中存储的数据(对其进行全文索引)量高出大约30%;但是,此规则取决于数据中唯一单词(或主键)的分布,以及被您视为是干扰词的单词的分布。干扰词(或终止词)是指要排除在全文索引和查询以外的词语(因为它们不是您感兴趣的搜索词,而且出现频率很高,所以只会使索引变得很大,而不会有实际效果)。稍后,我们将介绍有关干扰词选择方面的注意事项,以及如何优化干扰词以改善查询性能。共7页  第1页      
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 728x15, 创建于 08-4-23MSDN */google_ad_slot = "3624277373";google_ad_width = 728;google_ad_height = 15;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 160x600, 创建于 08-4-23MSDN */google_ad_slot = "4367022601";google_ad_width = 160;google_ad_height = 600;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>