Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Добрый день, все мои попытки найти и разобраться с полнотекстовым поиском завели меня в тупик. Все что я хочу - организовать поиск по одной таблице, по одному полю(хотя лучше по двум), но абсолютно не знаю как это реализовать. Хотелось бы что бы результаты поиска были не только по точному вхождению словосочетания, но и различные его вариации(разный порядок слов с различными окончаниями и возможно без одного-двух слов в случаи отсутствия результатов со всеми словами). Что лучше использовать для решения данной проблемы? Заранее благодарю за помощь
Не в сети
Приведу код с L3, поправил запрос под L5, но не проверял
$query = mb_strtolower(Request::input('search'), 'UTF-8');
$tmp = explode(" ", $query);
$query = [];
foreach ($tmp as $word)
{
$len = mb_strlen($word, 'UTF-8');
switch (true)
{
case ($len > 3 && $len <= 6):
{
$query[] = mb_substr($word, 0, -1, 'UTF-8') . "*";
break;
}
case ($len > 6 && $len <= 9):
{
$query[] = mb_substr($word, 0, -2, 'UTF-8') . "*";
break;
}
case ($len > 9):
{
$query[] = mb_substr($word, 0, -3, 'UTF-8') . "*";
break;
}
default:
{
break;
}
}
}
$query = array_unique($query, SORT_STRING);
$qQeury = implode(" ", $query);
// Ваша табличка для поиска (у меня просто таблица отдельно созданна для поисчка и при добавлении ремурсов, я весь обработанный текс забиваю в эту таблицу, можно напрямую искать)
$results = Search::whereRaw(
"MATCH(text,pagetitle) AGAINST(? IN BOOLEAN MODE)", // text,pagetitle - поля, по которым нужно искать
array($qQeury)
)->paginate(20, array('keys','pagetitle','url', 'text')); // поля, которые нужно вывести
If you think it’s expensive to hire a professional to do the job, wait until you hire an amateur.
Не в сети
Благодарю, думал примерно это же организовать, но у Вас получилось явно лучше. Только все равно прихожу к мысли о необходимости поискового движка к примеру spinx для более широких возможностей.
Изменено TuX560 (10.08.2015 09:34:05)
Не в сети
Страницы 1