匹配度排序实现方法??(能解决1000分拿去)

FENGUFO 2003-12-03 12:03:50
那位指教以下,我是没办法了!
比如:
id str
--------------
1 fengufobbaacc
2 feng
3 ufo
4 fengfengufoufoaaa
-------------------
搜索"feng ufo"返回应为
4
1
2
3
也就是匹配度越高(也包含出现次数)在前出现,类似google!
...全文
108 14 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
pengdali 2003-12-03
  • 打赏
  • 举报
回复
如果做得象google一样那不是可以做搜索引擎了,非结构化数据搜索引擎可以用数据库做到和Google一样的现在还没有。
pengdali 2003-12-03
  • 打赏
  • 举报
回复
DIFFERENCE
以整数返回两个字符表达式的 SOUNDEX 值之差。

语法
DIFFERENCE ( character_expression , character_expression )

参数
character_expression

是类型 char 或 varchar 的表达式。

返回类型
int

注释
返回的整数是 SOUNDEX 值中相同字符的个数。返回的值从 0 到 4 不等,4 表示 SOUNDEX 值相同。

示例
在下例的第一部分,比较两个相差很小的字符串的 SOUNDEX 值,DIFFERENCE 返回的值是 4。在下例的第二部分,比较两个相差很大的字符串的 SOUNDEX 值,DIFFERENCE 返回的值是 0。

USE pubs
GO
-- Returns a DIFFERENCE value of 4, the least possible difference.
SELECT SOUNDEX('Green'),
SOUNDEX('Greene'), DIFFERENCE('Green','Greene')
GO
-- Returns a DIFFERENCE value of 0, the highest possible difference.
SELECT SOUNDEX('Blotchet-Halls'),
SOUNDEX('Greene'), DIFFERENCE('Blotchet-Halls', 'Greene')
GO

下面是结果集:

----- ----- -----------
G650 G650 4

(1 row(s) affected)

----- ----- -----------
B432 G650 0

(1 row(s) affected)

sunsunup 2003-12-03
  • 打赏
  • 举报
回复
應該考慮速度問題
FENGUFO 2003-12-03
  • 打赏
  • 举报
回复
能不能实现先不说,这样会不会太慢!
mywhsw 2003-12-03
  • 打赏
  • 举报
回复
要有个中文、英文的字典库,然后有个查询语句的分析库,经过处理后把结果放到一个表里,再根据这个表里的记录进行查询,这样的思路可以吧
FENGUFO 2003-12-03
  • 打赏
  • 举报
回复
这问题是不好搞,我查了好久的资料,都没有相关的介绍,可站点的搜索,这也是必须的,

比如搜 "aa bb" (好多站,都这样写 like '%aa bb%') ,结果是一个也找不到,在好一点的
空格分开,like '%aa%' and like'%bb%' ,这样只包含aa的就早不到,包含 bb aa的 倒是可以出来,
写成这样最好,like '%aa%' or like '%bb%' 但是返回记录太多,就需要匹配排序!!!

那位高手搞定它,1000分送上
dlpseeyou 2003-12-03
  • 打赏
  • 举报
回复
ding
txlicenhe 2003-12-03
  • 打赏
  • 举报
回复
难啊
FENGUFO 2003-12-03
  • 打赏
  • 举报
回复
thank!
wzh1215 2003-12-03
  • 打赏
  • 举报
回复
帮你顶!
whatisyourname 2003-12-03
  • 打赏
  • 举报
回复
这个问题是是一个“工程”问题,而不是代码问题,
要不然一个搜索引擎怎么能卖几百万啊....
FENGUFO 2003-12-03
  • 打赏
  • 举报
回复
同意!观点
--------------------
如果做得象google一样那不是可以做搜索引擎了,非结构化数据搜索引擎可以用数据库做到和Google一样的现在还没有。
--------------------

非要数据库系统支持这种不可,其他用程序实现的方式,速度是大问题,返回个万千条,哪里处理得过来!(还有很多并发的)
yoki 2003-12-03
  • 打赏
  • 举报
回复
确实比较棘手。。
txlicenhe 2003-12-03
  • 打赏
  • 举报
回复
我来献丑:
create table t1(id int,str varchar(100))
insert t1 values(1,'fengufobbaacc')
insert t1 values(2,'feng')
insert t1 values(3,'ufo')
insert t1 values(4,'fengfengufoufoaaa')

Create function test(@str1 varchar(100),@str2 varchar(10))
returns int
as
begin
declare @i int,@j int
set @i =len(@str2)
while @i > 0
begin
if charindex(left(@str2,@i),@str1) > 0
or charindex(right(@str2,@i),@str1) > 0
begin
set @j = @i
set @i = 0
end
set @i = @i-1
end
return @j
end

declare @str varchar(10)
set @str = 'fengufo'
select id,dbo.test(str,@str) as 匹配长度 from t1 order by dbo.test(str,@str) desc,id
id 匹配长度
----------- -----------
1 7
4 7
2 4
3 3

(所影响的行数为 4 行)

22,299

社区成员

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

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