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

 更新时间:2013年9月23日 10:05  点击:3522

小项目有时需要用到关键词搜索相关性排序,用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";

[!--infotagslink--]

相关文章

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

    小项目有时需要用到关键词搜索相关性排序,用sphinx显得杀鸡用牛刀,就用mysql的order by或者php里设置权重...2013-09-23
  • 浅析关于PHP中Sphinx长连接问题

    关于什么是Sphinx这里我不不介绍了大家可百度查一下,下面我来介绍的是关于PHP中Sphinx长连接问题解析,希望些文章对各位朋友有帮助。 SphinxClient::open (PECL sp...2016-11-25
  • 浅谈Coreseek、Sphinx-for-chinaese、Sphinx+Scws的区别

    下面小编就为大家带来一篇浅谈Coreseek、Sphinx-for-chinaese、Sphinx+Scws的区别。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2016-12-24
  • Python Sphinx使用实例及问题解决

    这篇文章主要介绍了Python Sphinx使用实例及问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-04-27
  • Yii框架结合sphinx,Ajax实现搜索分页功能示例

    这篇文章主要介绍了Yii框架结合sphinx,Ajax实现搜索分页功能,结合实例形式分析了Yii框架中使用sphinx与Ajax实现搜索结果的分页展示效果,需要的朋友可以参考下...2016-10-20
  • Yii框架中sphinx索引配置方法解析

    这篇文章主要介绍了Yii框架中sphinx索引配置方法,较为详细的分析了sphinx索引配置的步骤与相关操作技巧,需要的朋友可以参考下...2016-10-20
  • 关于对sql2000查询结果进行相关度排序的测试

    sql2000的查询结果进行相关度排序,听起来好象很吸引人,不过真的是可以实现的。 上午上网看到了一篇利用微软index server来做全文查询的文章(这个以前也看到过,在...2016-11-25