Я пытаюсь определить, что лучший способ - найти варианты имени в базе данных. Например, я ищу Билла Смита. Я бы хотел, чтобы он вернулся "Билл Смит", очевидно, но мне также хотелось бы вернуть "Уильяма Смита", или "Билли Смит", или даже "Вилли Смита". Моя первоначальная мысль заключалась в создании иерархии имен, но я не знаю, где бы я мог получить такие данные, даже если она существует.
Поскольку пользователи могут искать в каталоге, я думал, что это будет ключевая функция. Например, люди, которых я посещал в школе, называли меня Джо, но я всегда хожу у Джозефа. Итак, я смотрел на фонетический поиск по имени, либо с NYSIIS, либо с помощью Double Metaphone, а затем на поиск по имени, используя это имя. Есть ли лучший способ сделать это - может быть, какая-то градиентная релевантность, используя полнотекстовый поиск по полному имени, а не поиск по двум частям по имени и фамилии? Часть меня думает, что если бы я сохранил имя как одно значение вместо нескольких значений, это могло бы облегчить дополнительные параметры поиска за счет возможности адресовать пользователя по имени.
Что касается платформы, я использую SQL Server 2005 - однако у меня нет проблемы с переносом некоторого совпадения в код; например, предварительное поселение фонетических ключей для пользователя, так как они не будут меняться.
Любые мысли или рекомендации будут оценены. Бесчисленные поисковые запросы в значительной степени оказались пустыми. Спасибо!
Изменить: Кажется, что есть два очень разных лагеря по функциональности, и я определенно сижу посередине прямо сейчас. Я мог видеть аргумент полнотекстового поиска - скорее всего, с отсутствием нормализации данных и многокомпонентным подходом, который использует разные критерии для разных частей имени.
Проблема в конечном итоге сводится к намерению пользователя. Пример Билла/Уильяма хороший, потому что он показывает мутацию первого имени, основанного на формальности использования. Я думаю, что создание иерархии имен является более точным (и расширяемым) решением, но будет намного сложнее. Подход с нечетким поиском проще реализовать за счет точности. Это справедливое сравнение?
Разрешение. Проведя некоторые тесты, я решил пойти с подходом, в котором первоначальная регистрация будет иметь полное имя, и я разберу его на несколько полей (имя, фамилия, середина, суффикс и т.д.). Поскольку я уверен, что это будет не идеально, я разрешу пользователю редактировать "части", включая добавление девичного или альтернативного имени. Что касается поиска, то при любом решении мне нужно будет поддерживать, какие варианты существуют, либо в таблице базы данных, либо в качестве тезауруса. В этом случае у них нет преимущества перед другим. Я думаю, что это сведется к производительности, и мне нужно будет запустить некоторые тесты, чтобы определить, что лучше. Спасибо, всем, за ваш вклад!