У меня есть таблица со списком людей и всей их контактной информацией. Я хочу, чтобы пользователи могли выполнять интеллектуальный поиск по таблице, просто набирая некоторые данные и возвращая результаты, где каждый введенный ими термин соответствует хотя бы одному из столбцов таблицы. Для начала я сделал запрос как
SELECT * FROM contacts WHERE
firstname LIKE '%Bob%'
OR lastname LIKE '%Bob%'
OR phone LIKE '%Bob%' OR
...
Но теперь я понимаю, что это полностью провалится на чем-то столь же простом, как «Боб Дженкинс», потому что он недостаточно умен, чтобы искать первую фамилию отдельно. Что мне нужно сделать, так это разделить поисковые термины и искать их по отдельности, а затем как-то пересекать результаты каждого термина. По крайней мере, мне кажется, что это решение. Но как лучше это сделать?
Я слышал о полнотексте и MATCH () ... ПРОТИВ (), но это звучит как довольно нечеткий поиск, и я не знаю, сколько работы нужно настроить. Я хотел бы получить точные результаты «да» или «нет» при разумных показателях. Поиск должен быть выполнен по 20 столбцам на 120000 строк. Надеемся, что пользователи не введут более двух или трех терминов.
Извините, я забыл упомянуть, что использую MySQL (и PHP).
Я только что разобрался с полнотекстовым поиском, и это крутой вариант для рассмотрения (есть ли способ отрегулировать, насколько он строг? LIMIT просто отбил бы результаты независимо от того, насколько хорошо они соответствовали). Но для этого требуется полнотекстовый индекс, и мой сайт использует представление, и вы не можете проиндексировать представление, верно? Итак ...