SQL Server Полный текст: Человеческие имена, которые звучат одинаково - PullRequest
1 голос
/ 15 марта 2012

У меня есть база данных с большим количеством клиентов. Пользователь системы хочет, кроме всего прочего, иметь возможность искать учетную запись клиента по имени.

Что я сделал, так это создал новую таблицу с именем CustomerFullText, которая просто имеет идентификатор CustomerId и поле nvarchar (max) «CustomerFullText». В «CustomerFullText» я объединяю весь текст, который у меня есть для клиента, например, Имя, фамилия, адрес и т. Д., И у меня есть полнотекстовый индекс в этом поле, так что пользователь может просто ввести в одно поле поиска и получить соответствующие результаты.

Я обнаружил, что это дало лучшие результаты, чем при поиске данных, хранящихся во множестве разных столбцов, хотя я полагаю, мне было бы интересно услышать, если это само по себе ужасная идея.

У многих людей есть имена, которые звучат одинаково, но имеют разное написание: Кэтрин, Кэтрин и Катарина, и, возможно, кто-то, кто записал в базу данных, - Кэтрин, но представляет себя как Кейт. Кроме того, Макдональд против Макдональда, Лиз против Элизабет и т. Д.

Поэтому я правильно сохраняю исходное имя, выполняя серию замен, прежде чем составлять полный текст. Таким образом, ВСЕ Кэтрин, Катейн и так далее заменяются на «КЕЙТ» в текстовом поле. Я делаю то же самое преобразование для моего параметра поиска, прежде чем запрашивать базу данных, поэтому тот, кто вводит «Catherine» в поле поиска, фактически запустит запрос «KATE» для полнотекстового индекса в базе данных, который будет соответствовать Catherine AND Katherine и так далее.

Мой вопрос: дублирует ли это какую-либо часть существующей полнотекстовой функциональности SQL Server? Я посмотрел, но я не думаю, что это то же самое, что пользовательский стеммер, средство разбиения слов или что-то подобное.

1 Ответ

2 голосов
/ 15 марта 2012

Вместо того, чтобы пытаться фонетически нормализовать ваши данные самостоятельно, я бы использовал алгоритм Double Metaphone , по сути, намного лучшую реализацию базовой идеи SOUNDEX.

Вы можете найти пример реализацииздесь: http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=13574, и другие перечислены в ссылке на Википедию выше.

Это создаст две версии нормализованного кода вашего слова.Затем вы можете сохранить их в двух дополнительных столбцах и сравнить их с текстом поиска, который вы бы преобразовали в двойной метафон на лету.

...