智能数据库搜索

ste*_*yer 3 c# sql-server asp.net web-services dynamics-sl

问题是有一个大约有20k客户记录的数据库,我想尽最大努力避免重复输入.该数据库是Microsoft SQL Server 2005,维护该数据库的应用程序是Microsoft Dynamics/SL.我正在创建一个与该数据库交互的ASP.NET Web服务.我的服务可以将客户记录插入数据库,从中读取记录或修改这些记录.无论是在我的Web服务中,还是通过MS Dynamics,还是在Sql Server中,我都希望在用户确认新记录添加之前提供可能的匹配列表.

因此,用户将提交记录,如果它似乎是唯一的,则记录将保存并返回新的ID.如果有可能重复,用户可以重新提交确认说"是的,我看到可能的重复,这是一个新记录,我想提交它".

如果它只是标点符号或空格符号(例如,如果您输入"Company,Inc."并且数据库中有"Company Inc"),这很容易,但如果有一些细微的变化,如"公司公司"怎么办? "而不是"公司公司",或者如果有一个肥胖的手指拼写错误,例如"Cmpany,Inc."甚至可以在列表中返回这样的记录?如果绝对不可能,我会处理我的问题如果由于重复需要合并记录,它只会导致更多的工作.

Mar*_*ett 5

哪种算法最适合您的具体信息在很大程度上取决于您的域名,因此我建议尝试一些不同的算法 - 您甚至可能需要合并一些才能获得最佳结果.缩写,尤其是特定领域的缩写,可能也需要进行预处理或标准化.

对于名字,你可能最好使用语音算法 - 考虑到发音.这些将使史密斯和施密特紧密相连,因为在这些话时容易混淆.Double Metaphone是一个不错的首选.

对于胖指法,使用编辑距离算法可能会更好- 这会在两个单词之间产生"差异".这些将史密斯和斯莫斯靠近得分 - 尽管2可能会通过语音搜索.

T-SQL有SOUNDEX和DIFFERENCE - 但它们很差.一莱文斯坦变种是经典的选择,但还有其他不错的选择-其中大部分是相当容易实现在C#中,如果你不能找到适当许可的实施.

所有这些都比C#更容易编码/使用C#(尽管我确实发现可能在SQL 中使用的可怕滥用T-SQL的双元电话).

虽然这个例子在Access中(我从未真正查看过代码,或者使用过实现),但是包含的演示文稿可以很好地了解您最终可能需要做什么.代码可能值得一看,也许是来自VBA的端口.