网站全文检索设计

news/2024/5/20 10:47:58/文章来源:https://blog.csdn.net/weixin_30908103/article/details/99787422

1、架构设计
采 用OLTP交易数据库和OLAP数据仓库(用于搜索和分析)分离的模式,OLTP作为OLAP的数据源通过SQL Server Integration Services (SSIS)定期导入到OLAP数据仓库环境中,OLAP采用星型结构以便于更好地满足搜索和将来的数据挖掘。 OLAP数据仓库的建立目标为了检索和数据挖掘,故其事实表的建立可以反范式原则设计。

  

SQL Server 2005全文检索技术在网站上的应用实录
图2

  2、原型设计(由于篇幅限制,这里仅给出搜索主页和主要资源查询页面)

  

SQL Server 2005全文检索技术在网站上的应用实录
图3

  3、数据库设计

  

SQL Server 2005全文检索技术在网站上的应用实录
图4

  4、数据字典

  MainInfoTab(信息主表)

  SQL Server 2005全文检索技术在网站上的应用实录

  CapitalInfoTab(资本信息明细表)

  SQL Server 2005全文检索技术在网站上的应用实录

  ProjectInfoTab(项目信息明细表)

  SQL Server 2005全文检索技术在网站上的应用实录

  MerchantInfoTab(政府招商信息明细表)

  SQL Server 2005全文检索技术在网站上的应用实录

  四、数据库全文检索实现

  至此,我们已经完成了全文检索的设计工作,现在可以来实现它的功能啦!

  首先, 让我们建立检索表的全文检索,全文检索要求唯一索引,故需要在相关表建立唯一聚集索引。

  第二步,使用SQL DDL或者SQL Server Management Studio建立表的全文检索。

  1)使数据库支持全文检索。

  

SQL Server 2005全文检索技术在网站上的应用实录
图5

  或者通过键入命令 EXEC SP_FULLTEXT_DATABASE 'Enable' 命令达到同样效果。

  2)定义表的全文检索目录和索引字段。

  在表的鼠标右键通过点击“全文检索定义全文检索”将弹出如下执行向导,本向导执行完毕则该表的全文检索业已完毕。

  a)选择要索引的字段

  

SQL Server 2005全文检索技术在网站上的应用实录
图6

  或者键入如下命令:

  

CREATE FULLTEXT INDEX ON TableName KEY INDEX PK_IndexName ON DB WITH CHANGE_TRACKING AUTO
ALTER FULLTEXT INDEX ON TableName ADD ColumnName

  b)选择或创建新的索引目录。

  

SQL Server 2005全文检索技术在网站上的应用实录
图7

  c)定义填充计划。

  

SQL Server 2005全文检索技术在网站上的应用实录
图8

  至此,表的全文索引已经建立完毕,表示只要键入SQL 指令就可以完成全文检索功能。

  第三步,开发存储过程并把结果集分页,以供前台页面调用返回查询的结果。

  1) 建立找资本全文检索储存过程USP_CaptialInfo_FullIndex。

/*
找资本全文索引开发过程 
*/
CREATE PROCEDURE USP_CaptialInfo_FullIndex
(
@TableViewQueryNameVarchar( 1024 ), --传入的查询字符窜
@SearchKeyword nvarchar(100), --传入的查询关键字
@SelectStr Varchar( 500 ), --选择列字符串
@Criteria Varchar( 8000 ), --查询条件
@Sort Varchar( 255 ), --排序字符串
@FristTopNum int,  --显示的第一页置顶的数目
@Page bigint OUTPUT , --显示的当前页号
@CurrentPageRowbigint,  --页大小(显示多少行) 
@TotalCount bigint output, --通过该查询条件,返回的查询记录的总页数
@Totaltimes bigint output --所有搜索时间,以秒为单位
)
as 
DECLARE @starttime datetime,
@endtime datetime
SELECT @starttime = getdate()
IF ISNULL(@SearchKeyword,'') !='' OR RTRIM(@SearchKeyword)!=''
BEGIN
SET @TableViewQueryName =
' SELECT '+
' ROW_NUMBER() OVER (ORDER BY RANK DESC) AS SerialNumber ,'+
' F.[rank], '+
' p.*' +
' FROM'+
' FREETEXTTABLE( CapitalInfoFactTab , (ProvinceName, CityName, 
CountyName, Keyword,Title ,IndustryBName , shortcontent, ComAbout , ComBreif) ,
'+ ''''+@SearchKeyword+ ''''+') AS f '+
' INNER JOIN  CapitalInfoFactTab  AS p '+
' ON f.[key] = p.infoID '
EXEC [USP_GetFrontDataList_ByFullIndex] @TableViewQueryName,
@SearchKeyword, @SelectStr, @Criteria, @Sort, @FristTopNum,
@Page OUTPUT , @CurrentPageRow , @TotalCount OUTPUT
END ELSE BEGIN
EXEC dbo.GetFrontDataList 'dbo.ProjectInfoFactTab', 'InfoID',
@SelectStr,@Criteria,@Sort,0, @Page output, @CurrentPageRow,
@TotalCount output
END
SELECT @endtime = getdate()
SELECT @Totaltimes = DATEdiff(Ms, @starttime ,@endtime)
RETURN

  2)建立通用分页存过程[USP_GetFrontDataList_ByFullIndex]。由于性能考虑,返回给前台页面需要网站数据库端即完成分页。

  

CREATE PROCEDURE [dbo].[USP_GetFrontDataList_ByFullIndex]
(
@TableViewQueryName Varchar( 1024 ),
  --Table或View或者Query的名字或字符串
@Key  Varchar( 50 ), --关键字
@SelectStr  Varchar( 500 ),  --选择列字符串
@Criteria  Varchar( 8000 ),--查询条件
@Sort  Varchar( 255 ), --排序字符串
@FristTopNum  INT,   --显示的第一页置顶的数目
@Page  BIGINT OUTPUT, --显示的当前页号
@CurrentPageRow BIGINT, --页大小(显示多少行)
@TotalCount  BIGINT OUTPUT  --通过该查询条件,返回的查询记录的总页数
)
AS
SET NOCOUNT ONif charindex(';',@Criteria)>0 or charindex('--',@Criteria)>0 or charindex('/*',@Criteria)>0 or
charindex('*/',@Criteria)>0 or charindex('syscolumns',@Criteria)>0 or
charindex('sysfiles',@Criteria)>0
or charindex('char(124)',@Criteria)>0 or charindex('1=1',@Criteria)>0
RETURN
DECLARE @TotalStr nVarchar(4000)
DECLARE @Str  nVarchar(4000)
DECLARE @TopRowNum bigint
IF @SelectStr IS NULL AND
RTRIM(LTRIM(@Criteria)) = ''
SET @SelectStr = '*'
IF @FristTopNum IS NULL AND @FristTopNum < 0
BEGIN
SET @FristTopNum = 0
END
ELSE IF @FristTopNum > @CurrentPageRow
BEGIN
SET @FristTopNum = @CurrentPageRow
END
IF @CurrentPageRow > 0
BEGIN
IF @Criteria IS NOT NULL AND
RTRIM(LTRIM(@Criteria)) <> ''
BEGIN
SET @TotalStr = 'SELECT @TotalCount=COUNT(*) FROM ' +
'('+ @TableViewQueryName  +')'+ ' T '
+ ' WHERE ' + @Criteria
END
ELSE
BEGIN
SET @TotalStr = 'SELECT @TotalCount=COUNT(*) FROM ' +
'('+@TableViewQueryName +')'+ ' T '
END
PRINT @TotalStr
EXEC sp_ExecuteSql @TotalStr, N'@TotalCount bigint output',@TotalCount output
SET @TotalCount = @TotalCount + isnull(@FristTopNum ,0)
DECLARE @TotalPage bigint
SET @TotalPage = @TotalCount/@CurrentPageRow
IF @TotalCount%@CurrentPageRow > 0
BEGIN
SET @TotalPage = @TotalPage + 1
END
IF @Page <= 0
BEGIN
SET @Page = 1
END
IF @TotalPage > 0 AND
@Page > @TotalPage
BEGIN
SET @Page = @TotalPage
END
--组织查询语句
SET @Str = 'SELECT  ' +  @SelectStr + ' FROM (' + 
@TableViewQueryName + ') T WHERE T.SerialNumber >' +
cast ((@Page-1) as varchar(10)) + '*' +cast( @CurrentPageRow as varchar(10))+ 
' AND T.SerialNumber <= '+
cast (@Page as varchar(10)) + '*' +cast( @CurrentPageRow as varchar(10))
IF @Sort IS NOT NULL ANDRTRIM(LTRIM(@Sort)) <> ''
BEGIN
IF @Criteria IS NOT NULL AND RTRIM(LTRIM(@Criteria)) <> ''
BEGIN
SET @Str = @Str +  ' AND (' + @Criteria + ') ORDER BY '+@Sort
END
ELSE
BEGIN
SET @Str = @Str +  ' AND (' + @Criteria + ') ORDER BY '+@Sort
END
END
ELSE
BEGIN
IF @Criteria IS NOT NULL AND  RTRIM(LTRIM(@Criteria)) <> ''
BEGIN
SET @str = @str + ' AND (' + @Criteria + ') ' 
END
END
--对无记录时当前页数的处理
IF @TotalCount=0
BEGIN
SET @Page = 0
END
END
EXEC sp_ExecuteSql @Str

由于本行业网站可以提高如下几类信息资源,现列表分示如下:
ID检索内容数据表检索命令示例
1投资CapitalInfoTabDECLARE @RC int
DECLARE @TableViewQueryName varchar(1024)
DECLARE @SearchKeyword nvarchar(100)
DECLARE @SelectStr varchar(500)
DECLARE @Criteria varchar(8000)
DECLARE @Sort varchar(255)
DECLARE @FristTopNum int
DECLARE @Page bigint
DECLARE @CurrentPageRow bigint
DECLARE @TotalCount bigint
DECLARE @Totaltimes bigint
 
-- TODO: 在此处设置参数值。
SET @SearchKeyword = '地产项目'
SET @SelectStr = '*'
SET @Sort = ''
SET @Page= 1
SET @CurrentPageRow = 20

EXECUTE @RC = [InvestDM].[dbo].USP_CapitalInfo_FullIndex
  @TableViewQueryName
 ,@SearchKeyword
 ,@SelectStr
 ,@Criteria
 ,@Sort
 ,@FristTopNum
 ,@Page 
 ,@CurrentPageRow
 ,@TotalCount OUTPUT
 ,@Totaltimes OUTPUT
SELECT @Page,@TotalCount,@Totaltimes
2融资ProjectInfoTabDECLARE @SearchKeyword nvarchar(100) --传入的查询关键字
SET   @SearchKeyword = '深圳'
 
SELECT p.title,
p.infoid,
f.[rank] ,
keyword,title,provinceName,cityName,CountyName

FROM
FREETEXTTABLE([ProjectInfoFactTab], (provinceName,cityName,CountyName,keyword,title), @SearchKeyword) AS f
INNER JOIN [ProjectInfoFactTab] AS p
ON f.[key] = p.infoID
ORDER BY RANK DESC
3招商MerchantInfoTab  DECLARE @SearchKeyword nvarchar(100) --传入的查询关键字
  SET   @SearchKeyword = '深圳'
  SELECT 
ROW_NUMBER() OVER (ORDER BY RANK DESC) AS SerialNumber ,
F.[rank],
p.*
FROM
FREETEXTTABLE( MerchantInfoFactTab , (ProvinceName, CityName,  CountyName, Keyword,

  Title ,IndustryBName , shortcontent, ZoneAbout , ZoneAboutBrief, MerchantTypeName ,MerchantAttributeName,

  CooperationDemandName ) ,

  @SearchKeyword) AS f

INNER JOIN  MerchantInfoFactTab  AS p 
ON f.[key] = p.infoID
4资讯NewsTab   DECLARE @SearchKeyword nvarchar(100) --传入的查询关键字
   SET   @SearchKeyword = '深圳'
   SELECT 
 ROW_NUMBER() OVER (ORDER BY RANK DESC) AS SerialNumber ,
F.[rank] ,
 p.* 
FROM 
 FREETEXTTABLE( NewsInfoFactTab , (AreaName,  Keyword, 
 Title , DisplayTitle, subtitle ,Summary , Content ,NewsIndustryName ,  NewsTypeName ) , @SearchKeyword ) AS f
INNER JOIN  NewsInfoFactTab  AS p 
 ON f.[key] = p.infoID 

转载于:https://www.cnblogs.com/0000/archive/2009/09/29/1576548.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_737405.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

美女SEO系列五:什么是外链?如何做高质量外链?

每天我们的工作就是做内容和发外链&#xff0c;那么对与新手SEO而言&#xff0c;什么是外链?高质量的外链怎么去做呢?那么&#xff0c;美女SEO周珍就来和大家一起来分享下吧! 一、什么是外链?外链&#xff0c;顾名思义就是指从别人的网站导入到自己网站的链接。导入链接对于…

网站合并...

今天把一个中文网站和一个英文网站合并到一起&#xff0c;也就是说在中文的根目录下新建一个目录然后把英文网站拷到里面就行了&#xff0c;可是打开的时候&#xff0c;中文的可以打开&#xff0c;但是英文的就报错了 <error statusCode"403" redirect"Promp…

使用 ASP.NET 2.0 增强网站的安全性

本文以 2004 年 3 月社区技术预览中的 ASP.NET 2.0 内容为基础。文中包含的所有信息有可能变更。 本文讨论&#xff1a; • ASP.NET 2.0 中的安全性增强 • 服务器端安全性控制 • 用户和角色数据库 • 无 cookie 的窗体身份验证 本文使用下列技术&#xff1a; ASP.NET、身份验…

php 发送mysql备份_PHP备份MySQL和网站发送到邮箱

欢迎进入Linux社区论坛&#xff0c;与200万技术人员互动交流 >>进入 使用PHP备份MySQL和网站发送到邮箱的方法。 代码&#xff1a; 1 #!/usr/local/bin/php.cli 2 ?php 3 require_once ./lib/swift_required.php; 4 //MySQL 5 $mysql_dbname "db"; 6 $mysql_…

bilibili小心心怎么获得_怎么优化关键词才能提高网站排名?

为了让自己的网站提高排名&#xff0c;每一个网站的管理者都会对自己的网站关键词进行优化&#xff0c;那么&#xff0c;怎么优化关键词才最合适呢&#xff1f;最能提高网站排名呢&#xff1f;关键词优化简单地说&#xff0c;就是把网站里面的关键词进行选词和排版&#xff0c;…

JavaScript网站设计实践(一)网站结构以及页面效果设计

这是JavaScript DOM编程艺术里的构建JavaScript网站设计的例子&#xff0c;这本书给我学习JavaScript带来许多启发&#xff0c;在这个乐队宣传网站中&#xff0c;把前面学到的知识点整合在这个项目了。在这里记录下实现这个乐队的宣传网站的具体过程&#xff0c;加深理解。好&a…

Sqlserver 数据库恢复常见错误及解决(网站转载 留着备用)

数据库恢复常见错误及解决 2009-04-13 11:25 1145人阅读 评论(0) 收藏 举报数据库databasesqlserverusermicrosoftsql server在sqlServer20005 的management studio里使用bak文件还原数据库的时候,总是失败!The backup set holds a backup of a database other than the existi…

抓取网站编码信息及内容

最近在编写一个读取网站内容的小东西&#xff0c;在网上一搜很多&#xff0c;但是在拿过来用时不太理想&#xff0c;有些内容读取还是出现乱码问题。于是我在loafinweb 这位兄弟代码的基础上做了一些小的调整&#xff0c;以达到个人需求&#xff0c;如有不对之处还请loafinweb …

视觉冲击!12个精美绝伦的扁平化网站设计

越来越多的人崇尚简单&#xff0c;简约的扁平化设计风格。扁平化设计对于印刷品设计、网页设计和移动操作系统的设计来都带去了新的变化。扁平化网页设计是指设计形式摒弃图案纹理背景&#xff0c;阴影文字以及网站盒模型的部分。 下面手机了12个来自全球各地的设计师们精工雕琢…

在网站前端中,你可能会用到的这些…

一、设置字体的行间距为3PX &#xff1a; letter-spacing:3PX ; 二、为投票所显示分值设置首字下沉并变大点 &#xff1a; XXX:first-letter {font-size:150%;font-weight:bold;float:left;} 注&#xff1a; float:left; 有起到下沉的效果&#xff1b; 三、当字体与图片、表单标…

Asp.net网站管理工具来配置membership

1.安装好sql express,创建自己的数据库 2.VS命令行下运行aspnet_regsql命令&#xff0c;弹出ASP.NET SQL Server Setup Wizard 3.server填入.\sqlexpress,选择自己的数据库 4.完成后&#xff0c;会自动在选择的数据库中生成11张和membership相关的表 5.修改web.config 1 <…

2014年全球网站设计的15个趋势

2019独角兽企业重金招聘Python工程师标准>>> 1、超长网页设计 以往的长网页会挤满内容&#xff0c;我们习惯于下滑滚动网页来获取信息&#xff0c;但并非是挤满内容枯燥的长网页&#xff0c;而是由更多的留白空间以及快速响应技术合并而成的超长网页设计。这样的设计…

搜索引擎排名都选乐云seo_微信订阅号和微信服务号做SEO优化排名都需要注意哪些细节?优秀的公众号微信SEO是怎么做的?...

微信订阅号和微信服务号排名规则&#xff0c;优秀的微信微信订阅号和微信服务号排名百科。微信订阅号和微信服务号排名优化的注意事项和细节今天和大家分享。随着微信微信订阅号和微信服务号的排名优化&#xff0c;大部分人已经知道了这个渠道的存在。其实很多人在很多新的产品…

帝国网站模板怎么上传到服务器,有一个网站模板,怎么上传到空间里?

有一个网站模板&#xff0c;怎么上传到空间里&#xff1f;(2017-03-22 22:52:06)标签&#xff1a;杂谈《帝国网站管理系统》英文译为"EmpireCMS"&#xff0c;简称"Ecms"&#xff0c;它是基于B/S结构&#xff0c;且功能强大而帝国CMS-logo易用的网站管理系统…

adminer.php 使用,网站没有phpMyAdmin,就用Adminer插件

网站数据库管理是非常重要的一件事情&#xff0c;很多同学习惯了phpMyAdmin这个管理工具&#xff0c;主机商一般也会配置phpMyAdmin环境。不过&#xff0c;如果你的WORDPRESS网站正好没有phpMyAdmin怎么办呢&#xff1f;自己装一个&#xff0c;我可不会&#xff0c;也不想去学&…

linux安装redis需要网站支持吗,Linux安装redis服务器和部署

第一步&#xff1a;下载安装包wget http://download.redis.io/releases/redis-5.0.5.tar.gz访问https://redis.io/download 到官网进行下载。这里下载最新的5.0.5版本.第二步&#xff1a;安装1.通过远程管理工具&#xff0c;将压缩包拷贝到Linux服务器中&#xff0c;执行解压操…

c语言字符串输出大写字母个数,欧洲区预选赛视频直播 -官方网站

本文主要解释在JS里面this关键字的指向问题(在浏览器环境下). 阅读此文章,还需要心平气和的阅读完,相信一定会有所收获,我也会不定期的发布,分享一些文章,共同学习 首先,必须搞清楚在JS里面,函数的几种调用方式: 普通函数调用 作为方法来调用 作为构造函数来调用 使用apply/cal…

网站负载均衡技术

DNS轮循  DNS轮循是指将相同的域名解释到不同的IP&#xff0c;随机使用其中某台主机的技术。但其具有明显的缺点&#xff1a;一旦某个服务器出现故障&#xff0c;即使及时修改了DNS设置&#xff0c;还是要等待足够的时间&#xff08;刷新时间&#xff09;才能发挥作用&#x…

如何从网站上下载php文件在哪里,新手拿到PHP网站源代码和sql数据库文件,从哪下手开始部署?...

今天解决一下新手在入门时的疑惑&#xff1f;菜鸟拿到一套PHP网站程序源代码和sql数据库文件&#xff0c;应该如何下手&#xff1f;从哪开始去上传程序部署网站呢&#xff1f;必须先了解FTP软件的使用方法(这是基础)这个软件就是为了上传你的网站程序&#xff0c;后期更新程序的…

linux 目录同步 rsync,Linux rsync网站目录同步功能的实现

实现目标&#xff1a;172.16.1.64服务器上的/var/www/sw_service目录&#xff0c;与172.16.1.60服务器上的/var/www/sw_service目录实现同步&#xff0c;即1.60主动向1.64同步环境配置&#xff1a;Server-->172.16.1.64/var/www/sw_serviceClient-->172.16.1.60/var/www/…