#php #mysql #string #search
#php #mysql #строка #Поиск
Вопрос:
Мой поиск позволяет пользователям искать игры в моей базе данных. Единственная проблема заключается в том, что если пользователь вводит несколько терминов в поиске, он получит хиты только в том случае, если эти несколько слов находятся рядом друг с другом.
Пример:
искомый термин = Вызов Duty Modern
результат = нет
НО если они вводят:
искомый термин = Call of Duty -или- Modern Warfare
результат = Call of Duty Modern Warfare 1/2/3 и т.д.
вот мой запрос mysql:
$query = "SELECT ID, title FROM games WHERE title LIKE '%{$title}%' AND platform = :platform LIMIT $startFrom,15";
$statement = $dbG->prepare($query);
$statement->bindValue(':platform', $platform);
$statement->execute();
$gamesLike = $statement->fetch(PDO::FETCH_ASSOC);
Я знаю, что должен разбивать каждое слово и выполнять поиск по каждому термину, но я боюсь, что это съест всю скорость моих программ…
существуют ли какие-либо конкретные настройки запросов MYSQL, которые я могу использовать для достижения нужного мне результата?
Любые предложения будут с благодарностью
Спасибо за ваше время
Ответ №1:
полнотекстовый поиск отлично подходит для этого: http://dev.mysql.com/doc/refman/5.0/en/fulltext-search.html
По сути, это превращает mysql в поисковую систему, которую вы используете match
, и against
для получения рейтинга того, как часто поисковые запросы отображаются в столбце, с которым вы сопоставляете. Он может обрабатывать частичные совпадения, множественные совпадения, исключает маленькие / общие слова для повышения производительности и позволяет использовать ключевые слова / символы поиска, такие как some -search
will возвращать результаты, которые должны иметь some
, но не могут иметь search
.
Кроме того, его удивительно легко настроить, поскольку практически все, что вам нужно, работает по умолчанию.
Комментарии:
1. Вау, это именно то, что мне было нужно (и надеялся, что mysql есть) =)