Как реализовать алгоритм поиска по имени и/или фамилии?
Доброго дня.
Интересует идея реализации алгоритма поиска для соц сети (php: zf). Сначала планировал использовать Lucene, сейчас смотрю в сторону Sphinx.
В БД (mysql) сейчас ~ 250 000 пользователей. Имя и фамилия хранятся в разных полях таблицы. Задача: Необходимо найти человека по имени и/или фамилии. К примеру "Иванов Сидор". Причем, в результатах, хотелось бы видеть людей "Иванов Сидор" или же "Сидор Иванов", результатов типа "Иванов Петр" и "Иванов Пупкин" не должно быть.
Позже, возможно, понадобится добавить еще и поиск по никнейму.
Также стоит учесть, что поиск может вестись как только по фамилии, так и только по имени.
Также имя и/или фамилия может состоять из нескольких слов, например "José Manuel Martins Dominguez"
Основной акцент на скорость и производительность.
Хотелось бы получить побольше информации о реализации: ссылки, статьи, мнения, личный опыт - сгодится все, буду очень признателен.
Да, это напрямую паттерн для сфинкса. Никаких особых ухищрений или преобразований не потребуется. Прямо так и индексируйте - имя в одном поле, фамилию в другом. Запрос "Вася пупкин" выдаст желаемое; кроме того можно делать селективный поиск типа "@name Вася" - только по полю "name".
Абсолютно так же добавите никнейм (просто добавите колонку в выдачу rowset при индексации; а если там какой-нибудь select * - то даже конфиг сфинкса трогать не нужно; добавите колонку в таблице, а потом переиндексируете и всё "подхватится")