CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  MS-SQL Server >  基础类

多关键字查询(太难了)有点人工智能的意思了。

楼主2004918(苦练)2005-10-03 09:39:18 在 MS-SQL Server / 基础类 提问

假如我查询   "女孩   北京"就能查询出第一条和第三条(因为这两个关键字那两条记录都包括),  
  查询“旅游”(因为这个关键字那条记录包括)就能查询出第二条”,  
  查询“情感   女孩   北京”就出现第一条和第三条。(因为第一条包括那所有关键字,第三条也比较匹配[符合两个],我希望可以指定一个匹配度参数,来决定取舍),  
  最后查询的结果按匹配度排序。(关键字的顺序无所谓)“北京   女孩   情感”和“女孩   情感   北京”算是完全匹配。  
   
  id   title     body     keywords  
  1     a             aa         北京   女孩   情感  
  2     b             bb         旅游   小资   超级女生  
  3     c             cc         情感   北京   餐饮  
   
  create   procudure   sp_search  
  @keywords   nvarchar(200)  
  @匹配度   float,  
  as  
  /*--不会写--*/  
  GO 问题点数:30、回复次数:2Top

1 楼softj(天地客人<最近很迷茫>)回复于 2005-10-03 10:26:01 得分 0

关键字最好有一个表做!再做个关系对应表!Top

2 楼ReViSion(和尚)回复于 2005-10-03 11:15:44 得分 30

 
  --分隔字符串用,这里的各个值以‘,’分隔,如果要以其他字符分隔请自行修改  
  if   not   object_id('GetRecords')   is   null  
  drop   function   GetRecords  
  go  
   
  create     function     GetRecords(@str     varchar(2000))        
  returns     @Rec     table     (Record     varchar(40))        
  as        
  begin        
  declare     @s     varchar(2000)        
  declare     @r     varchar(2000)        
  declare     @i     varchar(2000)        
  set     @s=@str        
  set     @i=CHARINDEX(',',@s)        
  while     @i>0        
  begin        
      set     @r=left(@s,@i-1)        
      insert     @Rec     values     (@R)        
      set     @s=right(@s,len(@s)-@i)        
      set     @i=CHARINDEX(',',@s)        
  end        
  if     len(@s)>0        
      insert     @Rec     values     (@s)        
   
  return        
  end        
  go  
   
  --以下为存储过程  
  create   proc   sp_search  
  @keywords   nvarchar(200),  
  @匹配度   int  
  as  
  --找出所有要查询的词  
  select   *   from    
  (select   id,title,body,keywords,count(1)   [匹配度]   from   aaa   a  
  ,dbo.GetRecords(@keywords)   b  
  where   charindex(b.record,a.keywords)>0  
  group   by   id,title,body,keywords)a  
  where     匹配度>=@匹配度  
  order   by   匹配度  
  GO  
   
  --调用实例及结果  
  exec   sp_search   '情感,女孩,北京',2  
   
  3 c cc 情感   北京   餐饮 2  
  1 a aa 北京   女孩   情感 3  
  Top

相关问题

  • 人工智能
  • extern关键字是什么意思
  • throws关键字是什么意思?
  • volatile 关键字的意思是什么?
  • 关键字exports什么意思?函数参数定义中的out关键字是什么意思?
  • procedure InsertText(AHandle: THandle); far;~ 关键字 FAR 什么意思?
  • 请问native这个关键字是什么意思?
  • namespace关键字是什么意思?怎么用?
  • 大家来讨论关键字"Me","My"都是什么意思
  • extern关键字是用来干什么的,什么意思/?

关键词

  • 查询
  • 关键字
  • 匹配
  • 分隔
  • 情感
  • 女孩
  • keywords
  • rec
  • varchar
  • 北京

得分解答快速导航

  • 帖主:2004918
  • ReViSion

相关链接

  • SQL Server类图书

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo