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