开始是产品提的需求,从来没用过模糊查询,还能带上匹配程度的。这个就像字符串匹配,应该不存在匹配度这个说法,因为匹配度如何定义也是一件复杂的事情,比如词语的同义等。但是用mysql来实现“伪匹配度”还是可行的。下边总结了几种思路:

 

MySql 模糊查询,按匹配度排序
数据

一、根据关键字出现的位置,给出不同的权重

     比如只包含关键字的,权重最高。但是缺点也很明显,太粗糙。

SELECT *

FROM demo

WHERE c LIKE '%人民日报%'

ORDER BY

 CASE

   WHEN c LIKE '人民日报' THEN 0

   WHEN c LIKE '人民日报%' THEN 1

   WHEN c LIKE '%人民日报' THEN 3

   ELSE 2

  END

 

 

MySql 模糊查询,按匹配度排序
不同权重

 

二、看长度

       其实也很好理解,长度越短,说明里面匹配的字符越多

SELECT * FROM demo

WHERE c LIKE '%人民日报%'

ORDER BY length(c)

LIMIT 10

 

MySql 模糊查询,按匹配度排序
剩余长度

但是不能避免出现多个关键字的情况,可以通过比例(剩余长度/长度),越小说明占比越大,匹配度越高:

SELECT *

FROM demo

WHERE c LIKE '%人民日报%'

ORDER BY length(REPLACE(c,'人民日报',''))/length(c)

LIMIT 10



作者:祖传编程
链接:https://www.jianshu.com/p/893676d6eae9
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

相关文章:

  • 2021-08-21
  • 2021-04-05
  • 2021-12-01
  • 2022-12-23
  • 2022-02-05
  • 2021-10-03
  • 2021-11-22
  • 2022-02-02
猜你喜欢
  • 2021-06-04
  • 2019-06-13
  • 2021-08-01
  • 2022-01-08
  • 2022-02-11
  • 2021-12-02
相关资源
相似解决方案