使用Microsoft SQL Server 2000全文搜索功能构建Web搜索应用程序(3)
发布时间:2008-09-29 12:32:00
另一种可以替代Web服务器端缓存的方法是在SQL Server自身中缓存结果集,并定义多种用于浏览这些结果的方法。虽然本文着重说明Web服务器(ASP)级别的应用程序设计,但SQL Server的可编程功能还为生成高性能的Web搜索应用程序提供了强大的框架。
小结
Microsoft SQL Server 2000的全文搜索功能为索引和查询数据库中存储的非结构化文本数据提供了可靠、快速而灵活的方法。如果要广泛地将这种快速、准确的搜索功能应用于各种应用程序,那么很有必要充分利用其速度和精确性,来实现全文搜索解决方案。通过分布计算负载并通过某些巧妙的方式对数据进行组织,可以省下钱来购买其他硬件和软件,以摆脱因不必要的缓慢查询带来的困扰。在开发优秀的搜索应用程序时,通常要考虑到许多因素和注意事项,希望本文提供的信息和示例对您学习使用 SQL Server 2000生成出色的Web搜索应用程序会有所帮助。
附录A:实现全文搜索功能的最佳选择
改进全文查询性能和有效性的一种可行方法是实现“最佳选择”系统。此系统是一种很简单的方法,可确保某些与特定查询表达式匹配的行先于其他行返回。最佳选择没有复杂的预编程逻辑(例如,SharePoint Portal Server就包含这样的逻辑),因此,通常是首选办法。
在本示例中挑选出最佳选择,并将唯一的主键和一些关键字存储在单独的表中。FREETEXTTABLE查询对(非常小的)最佳选择表执行,并且从该查询中返回的任何结果都与对基表的FREETEXTTABLE查询结果一同返回。在给定这些搜索条件下,最先返回的将是所有“最佳选择”行,随后是被 MSSearch视为关联程度最高的行(以递减顺序返回)。
下面是一个非常简单的用于创建最佳选择系统的示例脚本。
use myDb
create table documentTable(ftkey int not null, document ntext)
create unique index DTftkey_idx on documentTable(ftKey)
/*
在此插入文档
(要生成全文索引的所有文档)
*/
--为所有文档表创建全文目录和索引
exec sp_fulltext_catalog 'documents_cat', 'create', 'f:\ftCats'
exec sp_fulltext_table 'documentTable', 'create', 'documents_cat', 'DTftkey_idx'
exec sp_fulltext_column 'documentTable', 'document', 'add'
exec sp_fulltext_table 'documentTable', 'start_change_tracking'
exec sp_fulltext_table 'documentTable', 'start_background_updateindex'
/*
现在创建最佳选择表和索引
(添加应该始终最先返回的文档)
*/
create table bestBets(ftKey int not null, keywords ntext)
create unique index BBftkey_idx on bestBets(ftKey)
/*
在此插入最佳选择
*/
--为最佳选择表创建全文目录和索引
exec sp_fulltext_catalog 'bestBets_cat', 'create', 'f:\ftCats'
exec sp_fulltext_table 'bestBets', 'create', 'bestBets_cat', 'BBftkey_idx'
exec sp_fulltext_column 'bestBets', 'keywords', 'add'
exec sp_fulltext_table 'bestBets', 'start_change_tracking'
exec sp_fulltext_table 'bestBets', 'start_background_updateindex'
首先创建了一个通用的“所有文档”表,用于存储所有要全文索引的文档。通常情况下,文档表中包含其他列,但在本文中,只包含两列—主键索引和文档本身。全文目录和索引是为文档表而创建的。
接着创建了“最佳选择”表,用于存储所有全文查询中首先返回的特殊文档。此表只需具有全文主键列和文档本身(对将某些文档作为查询目标的策略进行优化,包括在该文档本身不包含的文档中添加其他关键字)。全文目录和索引是为最佳选择表而创建的。
最佳选择表和文档表可以共享文档(最佳选择文档还存储在常规文档表中,它们共享同一个主键值),也可以相互排斥(最佳选择文档只存储在最佳选择表中)。为便于检索,使最佳选择表与文档表互斥更为容易—这样做就无需从最佳选择和返回的普通搜索结果行集合中删除共享操作。另一方面,使用此方法维护文档可能很难实现,因为在此方法中,要在查询中添加逻辑来删除返回的行集合之间的共享文档。
如果给定上面的表,则可以创建两个存储过程,以便对最佳选择表和文档表进行搜索。可使用Web服务器级别的逻辑或其他存储过程来缓存和显示所需结果(与最佳选择一起使用时,请参阅下面有关缓存、显示和分页的一个完整、有效的示例)。
首先,创建一个用于检索最佳选择行(如果有)的存储过程:
create procedure BBSearch @searchTerm varchar(1024) as
select [key], [rank] from freetexttable(bestBets, keywords, @searchTerm) order by [rank] desc
确保已对传入搜索字符串进行清理,以避免在服务器上随意执行T-SQL,并确保用单引号将该字符串括起。这种情况下,使用FREETEXTTABLE比使用CONTAINSTABLE要好,因为FREETEXTTABLE将采用寻根溯源功能,并找到与任何搜索词相匹配的最佳选择。
接下来,第二个存储过程检索与常规搜索标准匹配的文档(如果有):
create procedure FTSearch @searchTerm varchar(1024) as
select [key], [rank] from freetexttable(documentTable, keywords, @searchTerm) order by [rank] desc
请再次确保已清理传入搜索字符串,并用单引号将该字符串括起。
执行这些存储过程时,应该在两个存储过程中传入相同的搜索词,首先执行最佳选择搜索,然后执行普通全文搜索。下一节更全面地介绍了在构建Web搜索应用程序时,如何与其他全文搜索技术一起使用最佳选择。


猜你喜欢
- 记录一下如何用python爬取app数据,本文以爬取抖音视频app为例。编程工具:pycharmapp抓包工具:mitmproxyapp自动
- 一、Python字符编码介绍1、须知:在python 2中默认编码是 ASCII,而在python 3中默认编码是 unicodeunico
- 想必大家都知道MSSQL中SA权限是什么,可以说是至高无上。今天我就它的危害再谈点儿,我所讲的是配合NBSI上传功能得到WebShell。在
- 前言在我们开发的过程中,我们会使用webpack-dev-server实现自动刷新,webpack-dev-server会把编译后的文件全部
- 列表转化为字符串如下所示:>>> list1=['ak','uk',4]>>&
- Python编写类的时候,每个函数参数第一个参数都是self,一开始我不管它到底是干嘛的,只知道必须要写上。后来对Python渐渐熟悉了一点
- 上一节我们介绍了MySQL的索引,用于提高查询效率。那么我们应该优化哪些库的哪些sql呢?答案1:肯定是查询频繁的数据库和查询执行时间长的s
- 最近工作需要用到序列匹配,检测相似性,不过有点复杂的是输入长度是不固定的,举例为:input_and_output = [1, 2,
- 一、功能这里的需求是,判断摄像头有没有被物体遮挡。这里只考虑用手遮挡---->判断黑色颜色的范围。二、使用OpenCV的Mat格式图片
- 摘要RepVgg通过结构重参数化让VGG再次伟大。 所谓“VGG式”指的是:没有任何分支结构。即通常
- 本文为大家分享了mysql 8.0.13 安装配置教程,供大家参考,具体内容如下下载下载地址解压解压之后没有my.ini文件(我的端口设置的
- 目录1、互斥锁Mutex1.1 Mutex介绍1.2 Mutex使用实例2、读写锁RWMutex2.1 RWMutex介绍2.2 RWMut
- CREATE INDEX Syntax CREATE [UNIQUE|FULLTEXT|SPATIAL] INDEX index_name
- 今天我们继续向大家介绍一款翻页效果的制作。当鼠标移动到链接上时,翻页的链接区除了有悬停效果,还会放大。这样的效果具有很强烈的效果。大家适当美
- 一、业务背景在金融风控领域,常常使用KS指标来衡量评估模型的区分度(discrimination),这也是风控模型最为追求的指标之一。下面将
- 很长时间以来,一直想将自己的一些零碎的想法总结下,给自己一个完整的思维,也算是做个存档。一家之言,绝不敢说对别人会有什么帮助,对外人的层面上
- Git 远程仓库Git 并不像 SVN 那样有个中心服务器。目前我们使用到的 Git 命令都是在本地执行,如果你想通过 Git 分享你的代码
- 目录前言sql_mode详解最重要的选项全部选项总结前言相信看过上一篇文章《MySQL案例:一个数据丢失 * 》的童鞋,都应该意识到,sql_
- 下载a.我这里用的是 ZIP Archive版的,win8 64位的机器都支持 这个所以我建议都用这个。还有这个比较简单而且还很
- 软件环境: 1、操作系统:Windows 2000 Server 2、数 据 库:Oracle 8i R2 (8.1.7) for NT 企