Sql server SQL Server上Levenshtein距离的最佳实践

Sql server SQL Server上Levenshtein距离的最佳实践,sql-server,tsql,levenshtein-distance,Sql Server,Tsql,Levenshtein Distance,我有一个使用SQL Server的web和移动字典应用程序。我正在尝试实现一个简单版本的“你的意思是什么”功能。如果用户输入的短语在数据库中不存在,我需要提出建议 我计划使用levenshtein距离算法。但有一点我无法理解:我是否需要逐个计算用户输入和数据库中存在的所有单词之间的levenshtein距离 假设我的数据库中有一百万个单词。当用户输入错误的单词时,我会计算一百万次距离吗 显然,这需要大量的时间。对于这种情况,最佳做法是什么?您是否已经了解了SQL Server中可用的用户定义函数

我有一个使用SQL Server的web和移动字典应用程序。我正在尝试实现一个简单版本的“你的意思是什么”功能。如果用户输入的短语在数据库中不存在,我需要提出建议

我计划使用levenshtein距离算法。但有一点我无法理解:我是否需要逐个计算用户输入和数据库中存在的所有单词之间的levenshtein距离

假设我的数据库中有一百万个单词。当用户输入错误的单词时,我会计算一百万次距离吗


显然,这需要大量的时间。对于这种情况,最佳做法是什么?

您是否已经了解了SQL Server中可用的用户定义函数

您可以使用触发器来计算列的soundex,并在每次更新列时将其保存在该列旁边。
搜索时,您可以计算搜索标准的soundex,并将其与表中存储的soundex列进行比较。

在实现方面,我将其设置为将单词列表缓存到web服务器并在那里进行比较。您不希望每次用户击键时都执行数据库存储过程。出于性能方面的考虑,您需要尽可能简单地来回切换。此外,无论如何,过程语言比声明性语言更擅长进行这些类型的计算。如果可能,您可以在客户机上创建一个小的索引缓存,以便在不进行任何web调用的情况下完成最后阶段


在进行实际匹配方面,请查阅劳伦斯·菲利普斯的双变音算法。它不如谷歌的“你是说什么?”好,但比SOUNDEX好得多。。。它已经被翻译成多种编码语言。通过将双变音与Levenshtein距离结合使用,您应该能够进行一些很好的匹配。

其他语言呢?在我的应用程序中,用户将输入西班牙语或土耳其语单词。是的,您需要逐个进行比较。这没有什么神奇的。可能有点过时了,但如果你只是为了学习经验而这样做的话,我会认真地建议你重新考虑在数据库中这样做。SQL数据库在关系查询方面非常好,但是当涉及到这样的事情时,你可以利用很多更好的工具。我想这对你有帮助。