国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > MySQL > 正文

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

2024-07-24 12:48:06
字體:
來源:轉載
供稿:網友

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

您可能感興趣的文章:

Mysql row number()排序函數的用法和注意將MySQL查詢結果按值排序的簡要教程兩種mysql對自增id重新從1排序的方法MySQL中按照多字段排序及問題解決mysql的中文數據按拼音排序的2個方法Mysql中的排序規則utf8_unicode_ci、utf8_general_ci的區別總結數據庫查詢排序使用隨機排序結果示例(Oracle/MySQL/MS SQL Server)MYSQL 關于兩個經緯度之間的距離由近及遠排序讓MySQL支持中文排序的實現方法MySQL按常規排序、自定義排序和按中文拼音字母排序的方法
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 塘沽区| 县级市| 丹阳市| 汪清县| 含山县| 西昌市| 鄂托克前旗| 团风县| 沾益县| 林西县| 本溪市| 泽州县| 富蕴县| 安西县| 清镇市| 凤庆县| 宜宾市| 定结县| 永新县| 浙江省| 隆化县| 宜良县| 潍坊市| 六盘水市| 武乡县| 凌云县| 和静县| 南昌县| 潢川县| 都兰县| 历史| 丰镇市| 开封县| 淄博市| 日照市| 万盛区| 赞皇县| 涿州市| 滨州市| 梓潼县| 宜宾市|