为模糊字符串匹配增加SQL Soundex的容错能力

时间:2014-09-16 08:17:36

标签: sql stored-procedures sql-server-2012 fuzzy-search soundex

有没有办法在用于模糊字符串匹配时增加SQL SOUNDEX函数的容错能力?我用它来搜索供应商名称。我所拥有的是:

WHERE
    SOUNDEX(@SearchTerm) = SOUNDEX(s.Name)

这在某种程度上有效,但我想稍微增加容错性。例如:

SOUNDEX('test') = T230
SOUNDEX('tet') = T300
SOUNDEX('tets') = T320
SOUNDEX('tes') = T200

理想情况下,我希望所有这些示例都匹配。此外,一个小问题是当供应商名称由2个单词组成而用户按第二个单词搜索时,这显然会起作用,因为行进取决于单词的第一个字母:

SOUNDEX('test supplier') = T230
SOUNDEX('supplier') = S146

最初,我在使用各种近似字符串比较算法的Web应用程序中使用模糊字符串比较库,但事实证明,当有20个人同时搜索5000多个供应商时,它对于要处理的Web服务器。我现在尝试在存储过程中执行此操作,以便数据库仅返回搜索结果,而不返回要搜索的供应商的完整列表。

1 个答案:

答案 0 :(得分:1)

您可以使用SQL CLR integration实现UDF并将其部署到服务器中。 (更为灵活:CLR Scalar-Valued Functions

我可以保证这是有效的,因为我做了同样的事情并查看超过350.000行(没有任何其他过滤器),它的工作速度非常快。它是Damerau-Leventshein算法的一种变体,因此是一种耗时的算法。

将所有行返回给应用程序,并在应用程序端进行过滤,直接在SQL Server中进行过滤之间的区别很大。