Я написал функцию, которая ищет в базе данных после фразы.Сначала я ищу записи, в которых есть все слова из фразы.Во-вторых, я ищу записи, в которых есть любое слово из заданной фразы.
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 записей.
- Запрос ищет предложения, содержащие все слова из данной фразы.
- Предложения поиска запросов, в которых есть любое слово из данной фразы.
Следует обратить внимание на проблемные строки, например: «ASP / NET / C # (Java-разработчик)». Эта строка содержит специальные символы