在SQL中查找类似值的性能技术?

在SQL中查找类似值的性能技术?,sql,pattern-matching,Sql,Pattern Matching,因此,我在表中有一列,其中包含字符串值(从第三方工具填充的关键字)。我正在开发一个自动化工具,以识别类似值的集群,这些集群可能被规范化为单个值。例如,“消防员”/“消防员”、“同位素”/“阿斯托普”或“犬科”/“犬科” 一种计算levenshtein距离的方法似乎很理想,但它涉及太多的字符串操作/比较,并且可能会不好地使用SQL索引 我考虑过按列的左(X)个字符进行增量分组,这是最大化索引使用的一种不错的方法,但这种方法实际上只在查找单词末尾有差异的单词时有效 有没有人有一些好主意可以在SQL中

因此,我在表中有一列,其中包含字符串值(从第三方工具填充的关键字)。我正在开发一个自动化工具,以识别类似值的集群,这些集群可能被规范化为单个值。例如,“消防员”/“消防员”、“同位素”/“阿斯托普”或“犬科”/“犬科”

一种计算levenshtein距离的方法似乎很理想,但它涉及太多的字符串操作/比较,并且可能会不好地使用SQL索引

我考虑过按列的左(X)个字符进行增量分组,这是最大化索引使用的一种不错的方法,但这种方法实际上只在查找单词末尾有差异的单词时有效

有没有人有一些好主意可以在SQL中有效地解决这个问题


注意:我意识到这个问题与()非常相似,但这里的区别是需要在SQL中高效地执行此操作。

您没有提到您使用的是什么DB,但是如果是t-SQL,您可以使用值和。

您没有提到您使用的是什么DB,但是如果不是-SQL,您可以使用值和。

如果您使用的是SQL Server,您可以使用SOUNDEX()函数,如下所示:

...
where
   SOUNDEX("searchterm") = SOUNDEX(searchvaluefield)
它应该在字符串上进行语音匹配

一些奇怪的例子。。。因此,似乎你可以通过总是将复数文本添加到两侧来捕捉复数,因为多个的发音相同…:-)


如果您使用的是SQL Server,您可能会考虑使用SOUNDEX()函数,如下所示:

...
where
   SOUNDEX("searchterm") = SOUNDEX(searchvaluefield)
它应该在字符串上进行语音匹配

一些奇怪的例子。。。因此,似乎你可以通过总是将复数文本添加到两侧来捕捉复数,因为多个的发音相同…:-)


John,如果您使用的是MS SQL Server,您可以利用该服务。全文搜索功能具有可用于实现此目的的功能。

John,如果您使用的是MS SQL Server,您可以利用该服务。全文搜索功能有多种实现方法。

目前我正在使用T-SQL,但我没有提到它,希望得到一个更通用的答案,可以在多个数据库平台上使用。不过,Soundex/Difference方法看起来很有希望。现在我正在使用T-SQL,但我没有提到它,希望得到一个更通用的答案,可以在多个数据库平台上工作。不过,Soundex/Difference方法看起来很有希望。我来试一试。有没有关于Soundex解析单词复数的经验?听起来这对“消防员”/“消防员”来说很好,但对“犬科动物”/“犬科动物”来说可能就没那么好了。有没有关于Soundex解析单词复数的经验?听起来对“消防员”/“消防员”来说不错,但对“犬科”/“犬科”来说可能就没那么好了。