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



不同权重


二、看长度

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

SELECT * FROM demo

WHERE c LIKE '%人民日报%'

ORDER BY length(c)

LIMIT 10


剩余长度

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

SELECT *

FROM demo

WHERE c LIKE '%人民日报%'

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

LIMIT 10

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • rljs by sennchi Timeline of History Part One The Cognitiv...
    sennchi阅读 12,205评论 0 10
  • 50个常用的sql语句Student(S#,Sname,Sage,Ssex) 学生表Course(C#,Cname...
    哈哈海阅读 5,040评论 0 7
  • pyspark.sql模块 模块上下文 Spark SQL和DataFrames的重要类: pyspark.sql...
    mpro阅读 13,234评论 0 13
  • MySQL语句大全(超详细) 1、说明:创建数据库 CREATE DATABASE database-name 2...
    Ncompass阅读 2,481评论 0 1
  • 1、说明:创建数据库CREATE DATABASE database-name2、说明:删除数据库drop dat...
    codeSirCao阅读 3,265评论 0 2

友情链接更多精彩内容