多关键字查询(太难了)有点人工智能的意思了。
假如我查询 "女孩 北京"就能查询出第一条和第三条(因为这两个关键字那两条记录都包括),
查询“旅游”(因为这个关键字那条记录包括)就能查询出第二条”,
查询“情感 女孩 北京”就出现第一条和第三条。(因为第一条包括那所有关键字,第三条也比较匹配[符合两个],我希望可以指定一个匹配度参数,来决定取舍),
最后查询的结果按匹配度排序。(关键字的顺序无所谓)“北京 女孩 情感”和“女孩 情感 北京”算是完全匹配。
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




