假如我查询 "女孩 北京"就能查询出第一条和第三条(因为这两个关键字那两条记录都包括),
查询“旅游”(因为这个关键字那条记录包括)就能查询出第二条”,
查询“情感 女孩 北京”就出现第一条和第三条。(因为第一条包括那所有关键字,第三条也比较匹配[符合两个], 我希望可以指定一个匹配度参数,来决定取舍), 最后查询的结果按匹配度排序。(关键字的顺序无所谓)“北京 女孩 情感”和“女孩 情感 北京”算是完全匹配。
id title body keywords
1 a aa 北京 女孩 情感
2 b bb 旅游 小资 超级女生
3 c cc 情感 北京 餐饮 看到一个答案,但不知道可用否,及如何使用 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
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货