我有一个包含3000万条记录的大型表格,其中包含一个自由格式的文本字段,其中可能包含任何位置的姓名,并且可以任何称呼,或者根本没有称呼。
我的工作是用Xxxxx Xxxxx屏蔽名称以保护隐私。
我可以访问一个大型姓氏数据库,为我定义名称的构成。
使用SQL Server 2012,我可以用于此任务的最有效技术是什么?
修改
好的,我的工作非常不错,包括全文索引/搜索,名称数据库和存储过程。
但是,我遇到了一个相当特殊的问题。我使用CONTAINS谓词(CONTAINS([textvaluefield],@ namestring),其中SET @namestring =' NEAR((博士,' + @ name +'),1,是的,'。
这完全有效,除非[textvaluefield]中的称呼是" DR。"而不是" Dr。",即" DR。约翰逊"并没有被提起,但是#34;博士。约翰逊"是。我已经验证了这一点,因为如果我更改了记录的[textvaluefield]中的值,那么" DR。"对于#34; Dr。"但是其他一切都保持不变,那个记录会突然被捡起来。如果我将记录恢复为使用" DR。",它将不会再次被接收。
这让我很奇怪的是,我肯定使用不区分大小写的排序规则(Latin1_General_CI_AS)。有人有什么想法吗?
答案 0 :(得分:0)
如果您可以确认“停用词”表中没有任何记录:
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]
不要忘记为要使用的全文添加唯一的聚簇索引。