乐码库:一个极速、放心、纯净的下载站! 更新: 资源发布
  • 您的位置:首页 > 技术文档 > 数据库 > mysql 加权法关键词相关度排序方法详细示例
  • 收藏本页
      mysql 加权法关键词相关度排序方法详细示例
      发布时间:2016-12-31 16:52:07 关键词: 加权法,相关度排序方法
      内容简介:做项目经常会用到搜索多个字段,结果按搜索到的字段排序

    小项目有时需要用到关键词搜索相关性排序,用sphinx显得杀鸡用牛刀,就用mysql的order by对付下。
    方法一:

    代码如下:

    select * from articles where (title LIKE '%keywords%') or (content LIKE '%helloworld%') order by ((CASE WHEN title LIKE '%keywords%' THEN 2 ELSE 0 END) + (CASE WHEN content LIKE '%helloworld%' THEN 1 ELSE 0 END)) ASC, dateline DESC
    方法二: 打个比方,如果搜索关键字“IBM”,“服务器”, 首先,对搜索关键字的处理,代码如下:
    代码如下:

    $kw = preg_replace("/(\s+)|( +)+/","", $kw);//替代空格,换行,tab,中文空格
    $kw = preg_replace( "/(^\s*)|(\s*$)/ ", "",$kw);//去除首尾空格
    $kw = preg_replace("/(\s+)/", "", $kw);//替换多个空格为一个空格
    $q = explode('',$kw);//枚举关键字
    这里还需要添加一个去掉标点符号的代码,但是这段代码会出现问题,不知道如何解决。

     

    然后是生成SQL语句的代码

    代码如下:

    $f = array(”name”,”description”); //查询的字段name=产品名,description=产品描述
    $s = array(4,2); //权重,name字段匹配积分4分,description字段匹配积2分,最后按积分排序
    代码如下:

    //创建查询条件语句
    for($i=0;$i<count($q);$i++){
    for($j=0;$j<count($f);$j++){
    $clause[$c] = ” (”.$f[$j].” LIKE ‘%”.$q[$i].”%') “;
    $score[$c] = ” IF(LOCATE('”.$q[$i].”‘, “.$f[$j].”), “.$s[$j].”, 0) “;
    $c++;
    }
    }
    $sql = “SELECT id, name, description,
    (”.implode(”+”,$score).”) AS score
    FROM product
    WHERE (”.implode(” OR “,$clause).”)
    ORDER BY score DESC”;
      最新更新
      热门排行榜