相关度排序的问题!

itfly 2005-10-26 10:28:59
如何利用SQL语法来实现站内搜索的相关度排序!
例:
标题 内容
1. 8万元创业 创业的资金。。。。。。。。。。。。
2. 创业艰苦创业难 创业的艰辛谁人知道啊

当用户搜索“创业”关键字的时侯,2这条新闻的匹配度要高一些,就让2排在前面,!各位有没有什么办法或写法啊。!
...全文
284 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
itfly 2005-10-28
  • 打赏
  • 举报
回复
我的是一个资料数据库,现在有10万数据,如果再过一些时间可能达到几十万,目前的问题就是这些初步的相关性查询的解决,

contains(title,'个人所得税') or contains(content,'个人所得税')
有点慢。
而且
配合 samfeng_2003(风云) 的算法,很多的时侯出不来了
tangchao515 2005-10-28
  • 打赏
  • 举报
回复
100万没有索引肯定很慢,用全文检索会快点,但再多或者要求更灵活更高点就要用搜索引擎技术了。
tangchao515 2005-10-28
  • 打赏
  • 举报
回复
没有办法了,建议用个搜索引擎吧。最近在做网站数据库开发,最大的感受就是以前企业数据库关心的是数据,而网络上关心的是信息,用老的技术是解决不了的。
itfly 2005-10-27
  • 打赏
  • 举报
回复
继续讨论啥
samfeng_2003 2005-10-26
  • 打赏
  • 举报
回复
数据量小不存在这些问题,你只需要把它做成个存储过程,然后调用应该效率比较高的吧!
samfeng_2003 2005-10-26
  • 打赏
  • 举报
回复
我重新修改了一下,因为我发现如果存在两个以上的那么要判断一个排名,所以,我觉得根据字符的位置来排含字符相同的。

[create] table t
(标题 varchar(50),内容 varchar(50))

insert t values ('8万元创业','创业的资金。。。。。。。。。。。。')
insert t values ('创业艰苦创业难','创业的艰辛谁人知道啊')
insert t values ('发挥艰苦创业创业精神','创业的艰辛谁人知道啊')
insert t values ('发挥艰苦创业的创业精神','创业的艰辛谁人知道啊')
insert t values ('今天发现了个美人','发现美人的艰辛谁人知道啊')
go

create function f_sort(@biao varchar(1000),@split varchar(100))
returns varchar(30)
as
begin
declare @i int,@j int,@k int
select @i=0,@j=0
,@k=case when charindex(@split,@biao)=1 then 1 else 0 end
while(charindex(@split,@biao)>0)
select @i=@i+1,
@biao=stuff(@biao,1,charindex(@split,@biao)+len(@split)-1,''),
@j=case when charindex(@split,@biao)=1 then @j+1 else @j end
return(right(10000+isnull(@i,0),4)+right(10000+@k,4)+right(10000+@j,4))
end
go


select * from t where charindex('创业',标题)>0 order by dbo.f_sort(标题,'创业') desc
drop function f_sort

标题 内容
-------------------------------------------------- --------------------------------------------------
创业艰苦创业难 创业的艰辛谁人知道啊
发挥艰苦创业创业精神 创业的艰辛谁人知道啊
发挥艰苦创业的创业精神 创业的艰辛谁人知道啊
8万元创业 创业的资金。。。。。。。。。。。。

(所影响的行数为 4 行)

drop table t
itfly 2005-10-26
  • 打赏
  • 举报
回复
那怎么办?!有什么办法提高效率,!?

另外,上面老兄的方法谁的高效一点,我的数据量小,现在测试不出来那个高效一点,那位高手评估一下啥。
tangchao515 2005-10-26
  • 打赏
  • 举报
回复
SQL是没有问题的,但用SQL来实现站内搜索,量一大就会很慢。
itfly 2005-10-26
  • 打赏
  • 举报
回复
感谢两位高手的指导,感谢,感谢!
lsxaa 2005-10-26
  • 打赏
  • 举报
回复
select *
from 表
order by (len(标题)-replace(标题,'创业',''))/len('创业')
+(len(内容)-replace(内容,'创业',''))/len('创业') desc
samfeng_2003 2005-10-26
  • 打赏
  • 举报
回复
[create] table t
(标题 varchar(200),内容 varchar(200))

insert t values ('8万元创业','创业的资金。。。。。。。。。。。。')
insert t values ('创业艰苦创业难','创业的艰辛谁人知道啊')

go

create function f_sort(@biao varchar(1000),@split varchar(100))
returns int
as
begin
declare @i int
select @i=0
while(charindex(@split,@biao)>0)
select @i=@i+1,
@biao=stuff(@biao,charindex(@split,@biao),len(@split),'')
return(@i)
end
go


select * from t where charindex('创业',标题)>0 order by dbo.f_sort(标题,'创业') desc

drop function f_sort
drop table t

标题 内容
-------------------------------------------------- --------------------------------------------------
创业艰苦创业难 创业的艰辛谁人知道啊
8万元创业 创业的资金。。。。。。。。。。。。

(所影响的行数为 2 行)
itfly 2005-10-26
  • 打赏
  • 举报
回复
初步这么考虑
zzit0721 2005-10-26
  • 打赏
  • 举报
回复
前提是你所谓的相关性靠什么来体现?
比如你输入创业,是否是看创业这个字段在内容中多次出现就为相关性比较强的
itfly 2005-10-26
  • 打赏
  • 举报
回复
我没有想误导人,我的意思是上百万可不可以!?
或者大家推荐一个比较高效的方法来实现!!
目前有接近100万的数据,我还没有来得急测试
tangchao515 2005-10-26
  • 打赏
  • 举报
回复
楼上的别误导人哦,测试过?上百万的TXT里面没有索引的遍历,会死人的,呵呵。
itfly 2005-10-26
  • 打赏
  • 举报
回复
上百万可以啥。
tangchao515 2005-10-26
  • 打赏
  • 举报
回复
数据量小无所谓啊,量大用SQL是解决不了的。

22,207

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧