MYSQL 關鍵字 相關性排序 匹配度排序

2021-06-20 03:14:58 字數 1128 閱讀 5232

曾今我也用like 『%kw%』 來查詢滿足條件的資料,但是如果遇到多關鍵字,在排序上就出現了問題,而大家當然願意把最匹配的搜尋結果排在前列,而不是按其他標準排序。

打個比方,如果搜尋關鍵字"ibm","伺服器",

首先,對搜尋關鍵字的處理,**如下:

$kw = preg_replace("/(\s+)|( +)+/", " ", $kw);//替代空格,換行,tab,中文空格

$kw = preg_replace( "/(^\s*)|(\s*$)/ ", "",$kw);//去除首尾空格

$kw = preg_replace("/(\s+)/", " ", $kw);//替換多個空格為乙個空格

//$kw = preg_replace( "/[[:punct:]]/", " ", $kw);//去除所有標點符號,此**有問

$q = explode(" ",$kw);//列舉關鍵字

這裡還需要新增乙個去掉標點符號的**,但是這段**會出現問題,不知道如何解決。

然後是生成sql語句的**

$f = array("name","description"); //查詢的字段name=產品名,description=產品描述

$s = array(4,2); //權重,name欄位匹配積分4分,description欄位匹配積2分,最後按積分排序

//建立查詢條件語句

for($i=0;$i

for($j=0;$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";

搜尋匹配關鍵字

改變關鍵字顏色 呼叫在你的cell中 tableview cellforrow 返回單元格內容 uitableviewcell tableview uitableview tableview cellforrowatindexpath nsindexpath indexpathelse range ...

LIKE匹配關鍵字

1.匹配任意數目字元 包括零個字元 select from edo user where true name like 王 應用 關鍵字查詢 where u.true name like 2.匹配任何單個字元 select from edo user where true name like 王 應...

mysql關鍵字匹配度模糊查詢

有時候專案中需要進行模糊查詢,但是要對查詢出來的結果進行匹配度排序,比如搜尋關鍵字是 北 需要把資料庫中第乙個字是北的排在前面,此時就可以用mysql的instr函式。instr 欄位名,字串 這個函式返回字串在某乙個欄位的內容中的位置,沒有找到字串返回0,否則返回位置 從1開始 例1 公升序排 s...