mysql 关键词相关度排序方法详细示例分析
mysql 关键词相关度排序方法详细示例分析【专家解说】:小项目有时需要用到关键词搜索相关性排序,用sphinx显得杀鸡用牛刀,就用mysql的order by对付下。方法一:复制
小项目有时需要用到关键词搜索相关性排序,用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”;
上一篇:wow那里掉幻化海盗套 要详细的
-
求关于东北亚低碳绿色城市示例资料2024-08-17
-
QQ空间按照什么原则自动提取日志关键字?2024-08-17
-
c++中关键字的分类2024-08-17
-
asp.net 查询出的关键字改变颜色怎么做?2024-08-17
-
静态页面关键字自动生成功能怎么实现?2024-08-17
-
求一份单片机C语言编程的32个关键字和9种控制语句的主要作用表2024-08-17
-
关键字之间用什么符号最好?2024-08-17
-
关键字在贴吧怎么设置,就是在个人资料那个地方显示的。蓝色的字体的那种2024-08-17
-
EXECL中如何用分式找出关键字,并带上关键字的数量?2024-08-17
-
迅雷资源关键字嗅探模块2024-08-17
-
在EXCEL中做了一个宏,通过查找一个关键字比如“帐户|”,然后要把这个单元格所在的行删除掉,怎么操作?2024-08-17
-
JAVA 中的关键字,用于抛出异常2024-08-17
-
在excel中排序时主关键字上显列标?我按工资排序,为什么在主关键字里没有工资这项,只有像(行1,行2)等2024-08-17
-
怎样在资产负债表内输入关键字“2010年2月25日”并生成报表数据2024-08-17
-
关键字的选择何不合理?2024-08-17