Я действительно думал, что приведенный ниже запрос вернет сначала наиболее просчитанный / релевантный результат. Поиск (компьютерный бизнес) для «Razer Gaming Mouse». Первые возвращенные результаты имеют эти условия 13 раз, а на 5-й позиции — результат, который имеет эти условия 17 раз. Есть ли лучший способ получить наиболее актуальный результат. Поскольку я работаю на виртуальном хостинге, я не могу изменить настройки сервера, поэтому мне пришлось комбинировать FULL TEXT и 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");
Использование Boolean в операторе MATCH вернет более неактуальный результат.
Задача ещё не решена.
Других решений пока нет …