模糊搜索符合oh my god的数据,越匹配的越靠前?100分随后补齐

tgtt 2009-04-15 10:43:43
请问如何实现这个功能,模糊搜索一个句子,匹配得单词越多的越靠前?????

这个帐号只有11分了,本问题能解决100分 肯定补齐。
...全文
81 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
yyz0832 2009-04-16
  • 打赏
  • 举报
回复
建议用全文检索吧.如果你需要查询的字段是中文的话,那做一下分词吧
wwwwb 2009-04-16
  • 打赏
  • 举报
回复
(length(col)-length(replace(col,'ss',''))/LENGTH('ss') :即SS出现的次数
select * from tt order by
(length(col)-length(replace(col,'ss',''))/LENGTH('ss')
wwwwb 2009-04-16
  • 打赏
  • 举报
回复
用replace把单词替换成'',然后取原来和替换后的长度差,差的越多,匹配的就越多
(length(col)-length(replace(col,'ss',''))/LENGTH('ss')

一般就是用REPLACE来取得的,在MYSQL下
replace(replace(col,'ss',''),'yy','')
语法是正确的

replace的时候如何能做到大小写不敏感,比如我要替换God,数据库里找到god也能替换掉?
转换成大写 OR 小写
UPPER、LOWER
replace(LOEWR(replace(LOWER(col),'ss','')),'yy','')
tgtt 2009-04-16
  • 打赏
  • 举报
回复
ACMAIN_CHM: 其实我的意思很简单,在一个字段里如果我要查询的三个单词都包含的话,不管顺序,那肯定关联性越强,就应该排在最前面。其次包含两个单词的关联性差一点,就排在后面。只包含一个单词的就排最后。
这就好比baidu搜索一样,你搜索出来结果肯定是关联性越强的排在越前面。

yangxiao_jiang:您的方法让人耳目一新,确实是个解决办法。我有两个疑问:(1)replace(replace(col,'ss',''),'yy','')这样使用不知道有没有语法错误?
(2)replace的时候如何能做到大小写不敏感,比如我要替换God,数据库里找到god也能替换掉?
yangxiao_jiang 2009-04-16
  • 打赏
  • 举报
回复
用replace把单词替换成'',然后取原来和替换后的长度差,差的越多,匹配的就越多

select table.*,(length(col)-length(replace(col,'ss','')) as ord from table order by ord
类似这样的sql
ACMAIN_CHM 2009-04-16
  • 打赏
  • 举报
回复

匹配得单词越多的越靠前

这个如何理解?

'hello oh my god test'
'test oh my god test oh my god'
'oh my test sd god'
'hi my god test'


建议能列点例子说明。

56,678

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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