多关键词的相关商品如何实现按相关度排序?

来源:百度知道 编辑:UC知道 时间:2024/05/22 01:34:58
我在商品表里设置了一个S_key字段,内容格式是“key1 key2 key3”,其范围大小是key1≤key2≤key3,比如“诺基亚 直板 手机”,我要实现显示相关商品时先显示最匹配key1的商品,然后再显示其它(匹配key2,key3的顺序无所谓了),能不能只用一条sql查询语句来读这个记录集并正常排序?

我能读取出来,不过排序是个问题。
可不可以先查询匹配第一个关键词key1获得一个记录集,再查匹配其它关键词获得一个记录集,然后将两个记录集合并在一起?如果可以代码是什么?

方法一:
代码如下:

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++)