搜索: 标题内容作者  
  首页数据库MySQL/Postgrsql
背景:
阅读新闻

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

[日期:2007-04-19]   来源:互联网整理  作者:佚名   [字体: ]
    新闻简介: 使用 Microsoft SQL Server 2000 的全文搜索功能构建 Web 搜索应用程序 Andrew B. CenciniMicrosoft Corporation 2002年12月 适用于:    Microsoft® SQL™ Server 2000摘要:学习如何充分利用 SQL Server 2000 的全文搜索功能。本文包含有关实现最大吞吐率和最佳性能的几点提示和技巧。 目录简介 全文搜索功能简介 配置全文搜索功能 全文查询 排位和优化 其他性能技巧 小结 附录 A:实现全文搜索功能的最佳选择 附录 B:使用最佳选择、结果分页和有效全文查询逻辑的示例应用程序 附录 C:资源
        关 键 词:   搜索  Microsoft 


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 搜索应用程序时,如何与其他全文搜索技术一起使用最佳选择。附录 B:使用最佳选择、结果分页和有效全文查询逻辑的示例应用程序在本例中,我们实现了一个几乎利用了本文介绍的所有优化方案的 Web 搜索应用程序。我们对联机零售商目录使用简单的搜索引擎方案,并假定在通信量很高的情况下,所有用户都期待在很短的响应时间内获得结果。本示例使用了前一节中的最佳选择表和存储过程。此应用程序只是一些可用于实现最佳全文搜索性能的高级策略的简单示例。本示例使用了 asp,也可使用 ISAPI、asp.net 或其他平台来实现具有各自优缺点的类似解决方案。会话对象并不一定对所有应用程序都适用,如果使用不当,可能带来一定程度的危险。在本例中,我们使用会话对象来实现快速有效的缓存机制 - 当然还有许多其他方法可以在不同程度上实现该功能。下面是 ASP 页的通用代码:<% @Language = \"vbScript\" %><% Response.buffer = true %><html>   <head>      <title>FT 测试</title></head>   <body><pre>----------------- 开始测试 ------------------

<%

Dim firstRow   @# 分页显示行时的第一行Dim lastRow      @# 分页显示行时的最后一行Dim pageSize   @# 页面大小(每次的行数)Dim cn      @# 连接对象Dim rs      @# FT 主键/排位返回的结果集(重复使用)Dim useCache   @# 使用缓存或命中 FT(0:不使用;1:使用)Dim alldata      @# 要缓存的结果行集合Dim bbdata      @# 要缓存的最佳选择行集合Dim connectionString   @# SQL 连接字符串

@# 确定是否要从缓存获取数据@# 默认为否,否则接受传入的数据if (request.Form(\"useCache\") <> \"\") then   useCache = request.Form(\"useCache\")elseif (request.QueryString(\"useCache\") <> \"\") then   useCache = request.QueryString(\"useCache\")else   useCache = 0end if

@# 设置常量pageSize = 24firstRow = 0lastRow = 23connectionString = <在此输入您的连接字符串>

@#----------------------------------------------------------------@#@# 显示与最佳选择/搜索词匹配的简单主键/排位                       @#@#----------------------------------------------------------------@#Private Sub SearchNPage()

   Dim p         @# 循环通过行时的计数器   Dim numRows      @# 缓冲/结果集中的总行数

   if (useCache <> \"1\") then @# 获取最佳选择/结果并将其缓存

      Dim queryArg   @# 传入的查询词      if (request.Form(\"searchTerm\") <> \"\") then         queryArg = request.Form(\"searchTerm\")      elseif (request.QueryString(\"searchTerm\") <> \"\") then         queryArg = request.QueryString(\"searchTerm\")      else         response.Write(\"未提供搜索词\" & VbCrLF)         exit sub      end if     

      @# 理想情况下,应该在此清理查询词...      @# 添加自定义的清理逻辑,以防止      @# 随意执行 SQL

      @# 调用 CleanString(queryArg)

      @# 建立与 SQL 的连接      Set cn = Server.CreateObject(\"ADODB.Connection\")      cn.Open connectionString

      @# 从传入的干净字符串中获取最佳选择匹配项      set rs = cn.Execute(\"exec BBSearch @#\" & queryArg & \"@#\")

      @# 如果有最佳选择,则获取最佳选择      if not(rs.EOF) then         bbData = rs.GetRows      end if

      @# 现在从传入的干净字符串中获取普通匹配项      set rs = cn.Execute(\"exec FTSearch @#\" & queryArg & \"@#\")

      @# 如果未返回任何结果,则结束      if (rs.EOF and IsEmpty(bbdata)) then         response.Write(\"没有匹配的行\" & VbCrLF)         call ConnClose         exit sub      end if

If you believe an article violates your rights or the rights of others, please contact us.

收藏 推荐 打印 | 录入:admin | 阅读:
相关新闻      
友情链接
本文评论   [发表评论] 全部评论 (0)
赞助商广告
热门评论