我真的认为下面的查询会首先返回大部分计数/相关结果。搜索(计算机业务)" razer游戏鼠标"。第一次返回的结果有13次,第5次位置的结果是17次。是否有更好的方法来获得最相关的结果。由于我在共享托管上,我无法更改服务器设置,这就是为什么我必须将完整文本和LIKE结合起来。
$searchwords = explode(' ', $SearchGoogle);
$longwords = '';
$shortwords = '';
foreach ($searchwords as $word) {
if (mb_strlen($word, 'UTF-8')>3) {
$longwords.=' +'.$word;
} else {
if (mb_strlen($word, 'UTF-8')>=2) {
if (!in_array($val,array('a')))//short words I don't want to have searched
$shortwords.=" AND Vendor LIKE '%$word%' OR Maincategory LIKE '%$word%' OR Subcategory1 LIKE '%$word%' OR Partnumber LIKE '%$word%' OR Details1 LIKE '%$word%' OR Details2 LIKE '%$word%' OR Details3 LIKE '%$word%'";
$shortwordsorder.="+(Case When Vendor LIKE '%$word%' OR Maincategory LIKE '%$word%' OR Subcategory1 LIKE '%$word%' OR Partnumber LIKE '%$word%' OR Details1 LIKE '%$word%' OR Details2 LIKE '%$word%' OR Details3 LIKE '%$word%' THEN 1 ELSE 0 END)";
}
}
}
$query = mysql_query("SELECT * From Pricelist Where MATCH (Vendor, Maincategory, Subcategory1, Partnumber, Details1, Details2, Details3, Subcategory1) AGAINST ('$longwords') $shortwords Order by Field(Vendor, '$SortedByValues') Desc, (MATCH (Vendor, Maincategory, Subcategory1, Partnumber, Details1, Details2, Details3, Subcategory1) AGAINST ('$longwords')) $shortwordsorder Desc Limit $RecordcountMoreResults, 50");
在MATCH语句中使用Boolean将返回更无关的结果。