mysql 关键词相关度排序方法详细示例分析
2013-08-12 09:05
615 查看
小项目有时需要用到关键词搜索相关性排序,用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”;
您可能感兴趣的文章:
相关文章推荐
- mysql 关键词相关度排序方法详细示例分析
- mysql 关键词相关度排序方法讨论
- MySQL 死锁的详细分析方法
- MYSQL中对SQL性能分析方法 Explain 详细解释
- Mysql 死锁的详细分析方法
- mysql锁-详细版 包括MyISAM和InnoDB 以及分析方法
- Mysql 死锁发生时的详细分析方法
- MySQL This function has none of DETERMINISTIC, NO SQL...错误1418 的原因分析及解决方法 (转)
- MySQL 常见错误分析与解决方法
- MySQL Sending data导致查询很慢的问题详细分析
- MySQL死锁问题实例分析及解决方法
- MySQL表排序规则不同错误问题分析
- MySQL排序原理与MySQL5.6案例分析【转】
- PHP数组排序 array_multisort函数详细用法跟排序方法
- 这么详细的分类 MySQL源代码网站你见过没有? MySQL中的每一个方法,每一个操作,每一个函数,每一个类.每一个属性,每一个事件都有相应的范例代码
- Java利用IO流复制照片完整示例和详细分析
- 超详细mysql left join,right join,inner join用法分析(转载)
- mysql服务器查询慢原因分析与解决方法小结
- weblogich占用高CPU详细分析方法