SQL-запрос Laravel - долгое время ожидания результата - PullRequest
0 голосов
/ 29 января 2019

Я написал функцию, которая ищет в базе данных после фразы.Сначала я ищу записи, в которых есть все слова из фразы.Во-вторых, я ищу записи, в которых есть любое слово из заданной фразы.

public static function findTitleAll($fullTextWildcards) {
    return \App\Offers::select(...)->where('active', '=', '1')->where('payed', '=', '1')
                    ->where(function ($query) use ($fullTextWildcards) {
                        $query->orWhereRaw('MATCH (title) AGAINST ("' . $fullTextWildcards . '" IN BOOLEAN MODE)');
                    });
}

public static function titleAny($findTextWildcards) {
    return \App\Offers::select(...)->where('active', '=', '1')->where('payed', '=', '1')
                    ->where(function ($query) use ($findTextWildcards) {
                        foreach ($findTextWildcards as $value) {
                            $query->orWhere('title', 'like', "%" . $value . "%");
                        }
                    });
}

Затем объединяет результаты без повторения $ result1-> merge ($ result2) ... etc

Требуется много времени, чтобы вернуть такой результат.Это не эффективное решение.Как я могу попросить таблицу получить наиболее релевантные результаты?В настоящее время в таблице содержится более 70 000 записей.

  1. Запрос ищет предложения, содержащие все слова из данной фразы.
  2. Предложения поиска запросов, в которых есть любое слово из данной фразы.

Следует обратить внимание на проблемные строки, например: «ASP / NET / C # (Java-разработчик)». Эта строка содержит специальные символы

...