В моей таблице mysql есть поля заголовка (varchar), описания (текст), ключевых слов (varchar).
Я сохранил поле ключевых слов, так как думал, что буду искать только в этом поле. Но теперь мне нужно искать среди всех трех полей. поэтому для ключевых слов "word1 word2 word3" мой запрос становится
SELECT * FROM myTable
WHERE (
name LIKE '%word1%' OR description LIKE '%word1%' OR keywords LIKE '%word1%'
OR name LIKE '%word2%' OR description LIKE '%word2%' OR keywords LIKE '%word2%'
OR name LIKE '%word3%' OR description LIKE '%word3%' OR keywords LIKE '%word3%')
AND status = 'live'
выглядит немного грязно, но это работает. Но теперь мне нужно реализовать поиск по синонимам. поэтому для данного слова при условии наличия нескольких синонимов этот запрос становится более запутанным, когда я перебираю все слова. Поскольку требования становятся яснее, мне нужно будет присоединить этот myTable к некоторым другим таблицам.
So
Считаете ли вы, что приведенный выше способ является грязным и вызовет проблемы по мере роста данных?
Как мне избежать беспорядка выше? Есть ли какое-нибудь более чистое решение, которое я могу найти Любой пример поможет мне.
- Есть ли другой метод / метод, который вы можете порекомендовать мне?
С благодарностью
EDIT
@ Питер Стуифзанд предложил мне, чтобы я мог создать одну таблицу search_index и сохранить все 3 поля (название, ключевое слово, описание) и выполнить полнотекстовый поиск. Я понимаю, что дополнительно эта таблица будет также включать ссылку на первичный ключ myTable.
Но мой расширенный поиск может включать в себя соединение mytable с таблицей категорий, таблицей географического расположения (для поиска в пределах 10, 20 миль и т. Д.), Фильтрацию по некоторым другим критериям и, конечно же, сортировку результатов поиска. Как вы думаете, использование полного текста MySQL не замедлит его?