Я создаю поиск на своем сайте, и я заметил, что он не работает, когда вы вводите более одного слова в поиск. Вот суть запроса:
SELECT * FROM `blog` WHERE `content` LIKE '%$keyword%' OR `title` LIKE '%$keyword%' ORDER BY `id` DESC
Странным является то, что когда я проверяю запрос в phpMyAdmin, он возвращает ожидаемые результаты. Однако на моем сайте результатов не найдено.
Я попытался заменить пробелы в ключевом слове% s, но это ничего не изменило.
Проблема в том, что LIKE
выполняет сопоставление шаблонов, а не поиск ключевых слов. Вы должны создать полнотекстовый указатель в столбцах базы данных и использовать WHERE MATCH keywords AGAINST column
. Это будет правильно искать все ключевые слова в любом порядке и быть намного быстрее в любом случае.
Я просто попробовал это в своей базе данных, и использование LIKE
в запросе более чем в 66 раз быстрее, чем использование MATCH
с полнотекстовым индексом. Я использую две таблицы, которые «связаны» друг с другом. Один из них – это теги, а другой – продукты.
Так что я сделал то, что я добавил индекс полного текста в столбец тега в таблице тегов и выполнил совпадение с этим столбцом. Запрос, чем объединяет продукты, а затем выплевывает некоторые данные об элементе. Это заняло около 4 секунд с ~ 3000 продуктов и ~ 3000 тегов.
Затем я попробовал это, сначала взломав строку поиска пробелами, а затем взломал результат с помощью %' OR tags.tag LIKE '%
. Это заняло около 0,06 секунды с таким же количеством продуктов и тегов.