Выделение имен пользователей из текстового поля свободной формы

У меня есть большая таблица из 30 миллионов записей, которая содержит текстовое поле свободной формы, которое может содержать имена в любой позиции и с любым приветствием или вовсе не приветствовать.

Моя задача - замаскировать имена с помощью Xxxxx Xxxxx для сохранения конфиденциальности.

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

Используя SQL Server 2012, какой самый эффективный метод я могу использовать для этой задачи?

ИЗМЕНИТЬ

Хорошо, у меня есть что-то очень приличное, что включает полнотекстовый индекс/поиск, базу данных имен и хранимую процедуру.

Однако я столкнулся с довольно своеобразной проблемой. Я использую предикат CONTAINS (CONTAINS ([textvaluefield], @namestring), где SET @namestring = 'NEAR ((Dr.,' + @Name + '), 1, TRUE)'.

Это работает отлично, за исключением случаев, когда приветствие в [textvaluefield] - "DR". вместо "Доктор", т.е. "Др. Джонсон" не получает, но "доктор Джонсон". Я проверил это, потому что, если я изменил значение в поле [textvaluefield] записи из "DR". на "Доктор", но оставим все остальное одинаково, что запись внезапно поднимется. Если я верну запись, чтобы использовать "DR.", Она не будет снова получена.

Что делает этот причудливый факт, что я определенно использую нечувствительность к регистру (Latin1_General_CI_AS). У кого-нибудь есть идеи?

1 ответ

Если вы можете убедиться, что у вас нет записей в таблицах "стоп-слов":

SELECT * FROM sys.[fulltext_system_stopwords] AS FSS WHERE [stopword] LIKE 'Dr_'
SELECT * FROM sys.[fulltext_stopwords] AS FS

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

CREATE VIEW [User].[UserValues]
WITH
 SCHEMABINDING
AS
SELECT
 [UserId]
 , [UserName]
 , LOWER(Username]) AS [LoweredUsername]
 FROM
 [User].[Values]

Не забудьте добавить уникальный кластеризованный индекс для полного использования текста.

licensed under cc by-sa 3.0 with attribution.