Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 07.08.2015 14:01:18

Полнотекстовый поиск

Добрый день, все мои попытки найти и разобраться с полнотекстовым поиском завели меня в тупик. Все что я хочу - организовать поиск по одной таблице, по одному полю(хотя лучше по двум), но абсолютно не знаю как это реализовать. Хотелось бы что бы результаты поиска были не только по точному вхождению словосочетания, но и различные его вариации(разный порядок слов с различными окончаниями и возможно без одного-двух слов в случаи отсутствия результатов со всеми словами). Что лучше использовать для решения данной проблемы? Заранее благодарю за помощь

Не в сети

#2 08.08.2015 20:58:21

Artdevue
Откуда: Kiev
Сообщений: 119
Сайт

Re: Полнотекстовый поиск

Приведу код с 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.

Не в сети

#3 10.08.2015 09:33:47

Re: Полнотекстовый поиск

Благодарю, думал примерно это же организовать, но у Вас получилось явно лучше. Только все равно прихожу к мысли о необходимости поискового движка к примеру spinx для более широких возможностей.

Изменено TuX560 (10.08.2015 09:34:05)

Не в сети

Подвал раздела