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

2023年 4月 22日 47.8k 0

小项目有时需要用到关键词搜索相关性排序,用sphinx显得杀鸡用牛刀,就用mysql的order by对付下。 方法一: 复制代码 代码如下: select * from articles where (title LIKE '%keywords%') or (content LIKE

小项目有时需要用到关键词搜索相关性排序,用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 scoreFROM productWHERE (”.implode(” OR “,$clause).”)ORDER BY score DESC”;

相关文章

Oracle如何使用授予和撤销权限的语法和示例
Awesome Project: 探索 MatrixOrigin 云原生分布式数据库
下载丨66页PDF,云和恩墨技术通讯(2024年7月刊)
社区版oceanbase安装
Oracle 导出CSV工具-sqluldr2
ETL数据集成丨快速将MySQL数据迁移至Doris数据库

发布评论