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
    来源:简书
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
  • 相关阅读:
    Java 插入排序
    Java 浮点型与双精度数值比较
    Java 包装类Integer的值比较
    ORA-00942 table or view does not exist
    logging模块
    面向对象
    模块和包
    异常处理
    序列化模块
    css3选择器
  • 原文地址:https://www.cnblogs.com/interdrp/p/12526946.html
Copyright © 2011-2022 走看看