使用T-SQL查找大约重复的数据库记录?
问题描述:
嘿,所有。我有一个有相当数量的行的MSSQL 2008数据库。到目前为止,在将新行插入表之前,存储过程会检查数据库中是否已存在该记录(通过检查标题为“标题”的列)。此检查是确切的,如果要插入的记录略有不同,它将插入它而不是更新现有的行(这是近似匹配)。我想要做的是在插入之前以某种方式检测表中的近似重复。因此,要插入一个新的记录是:使用T-SQL查找大约重复的数据库记录?
The quick brown fox jumps over the lazy dog
将大致匹配:
Quick brown fox jumps over the lazy dog
如果在表中存在这个记录了。我见过(并用于其他情况)在T-SQL中实现的Levenshtein Distance算法,但我不确定这是否可以应用于我的情况,因为需要一对输入字符串来执行算法。社区成员如何处理这类事情?谢谢。
答
Full-Text Search是你最好的选择。由于需要计算咕噜声,在任何非平凡大小的文本语料库上使用Levenshtein很快就会出现问题。使用LD/SOUNDEX等基于字符的差异而不是基于字的差异更常见。假设文字至少拼写正确,FTS会更合适。我也可以想象使用FTS来识别可能的匹配候选者的两层方法,在筛选后的集合上执行更精细的匹配。如果你真的想去镇上,那么搜索文本的最好的结构之一是Trie,但这在表格中实施起来很棘手,并且作为内存数据结构更好。一个基于n-gram解决方案的词也可能值得研究。