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

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

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

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


    另一种可以替代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搜索应用程序时,如何与其他全文搜索技术一起使用最佳选择。

0
投稿

猜你喜欢

手机版 网络编程 asp之家 www.aspxhome.com