Stafox
@Stafox
Web developer со всеми вытекающими...

Как реализовать алгоритм поиска по имени и/или фамилии?

Доброго дня.

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

Хотелось бы получить побольше информации о реализации: ссылки, статьи, мнения, личный опыт - сгодится все, буду очень признателен.
  • Вопрос задан
  • 5026 просмотров
Пригласить эксперта
Ответы на вопрос 2
@aplic
По мне так хранение имен и фамилий можно делать в виде словарей. Словоформ нет.
Ответ написан
@klirichek
Да, это напрямую паттерн для сфинкса. Никаких особых ухищрений или преобразований не потребуется. Прямо так и индексируйте - имя в одном поле, фамилию в другом. Запрос "Вася пупкин" выдаст желаемое; кроме того можно делать селективный поиск типа "@name Вася" - только по полю "name".
Абсолютно так же добавите никнейм (просто добавите колонку в выдачу rowset при индексации; а если там какой-нибудь select * - то даже конфиг сфинкса трогать не нужно; добавите колонку в таблице, а потом переиндексируете и всё "подхватится")
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы