Поиск по каждому слову, а не по полной строке, используя MYSQL PHP - PullRequest
3 голосов
/ 01 октября 2011

Мой поиск позволяет пользователям искать игры в моей базе данных. Единственная проблема заключается в том, что если пользователь вводит несколько терминов в поиске, он будет получать хиты только в том случае, если эти несколько слов находятся рядом друг с другом.

Пример:

искомый термин = Call 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 Ответ

6 голосов
/ 01 октября 2011

полнотекстовый поиск отлично подходит для этого: http://dev.mysql.com/doc/refman/5.0/en/fulltext-search.html

По сути, MySQL превращается в поисковую систему, где вы используете match и against, чтобы получить рейтинг того, как часто показываются поисковые термины.вверх в столбце вы противОн может обрабатывать частичные совпадения, множественные совпадения, исключая малые / общие слова, чтобы повысить производительность, и позволяет искать ключевые слова / символы, такие как +some -search, которые будут возвращать результаты, которые должны иметь some, но не могут иметь search.

Кроме того, он удивительно прост в настройке, так как почти все необходимое по умолчанию работает.

...