首页 > 数据库 > MySQL > 正文

mysql 关键词相关度排序方法详细示例分析

2024-07-24 12:48:06
字体:
来源:转载
供稿:网友

小项目有时需要用到关键词搜索相关性排序,用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 row number()排序函数的用法和注意将MySQL查询结果按值排序的简要教程两种mysql对自增id重新从1排序的方法MySQL中按照多字段排序及问题解决mysql的中文数据按拼音排序的2个方法Mysql中的排序规则utf8_unicode_ci、utf8_general_ci的区别总结数据库查询排序使用随机排序结果示例(Oracle/MySQL/MS SQL Server)MYSQL 关于两个经纬度之间的距离由近及远排序让MySQL支持中文排序的实现方法MySQL按常规排序、自定义排序和按中文拼音字母排序的方法
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表