zoukankan      html  css  js  c++  java
  • 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



    作者:祖传编程
    链接:https://www.jianshu.com/p/893676d6eae9
    来源:简书
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
  • 相关阅读:
    [Linux] expect命令 (自动交互脚本)
    [MAC] 终端bash_profile配置不生效问题
    [IDEA] 开发常用插件
    [MAC] 环境常用工具
    [IDEA] 快捷键输出固定代码模板
    家庭网络-多无线路由器实现无缝漫游
    家庭网络-AP组网方案(POE供电)
    家庭网络-软路由搭建方案
    队列使用
    [多线程] 线程池的使用
  • 原文地址:https://www.cnblogs.com/interdrp/p/12526946.html
Copyright © 2011-2022 走看看