程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> 關於MYSQL數據庫 >> mysql 關鍵詞相關度排序方法詳細示例分析

mysql 關鍵詞相關度排序方法詳細示例分析

編輯:關於MYSQL數據庫

小項目有時需要用到關鍵詞搜索相關性排序,用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”;

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved