我需要通过名单搜索并找出具有匹配百分比的相关匹配名称。例如,如果我有这样的名单,
Ramu
Rahim
Raju
Ravan
Mustafa
如果我给 Raheem 这样的名字,它会找出 Rahim 的名字并显示匹配的百分比,比如
Given Input:Raheem
Output:
Name Rahim match with the name Raheem 70%
我可以使用 MySql 满足我的要求吗?
注意:我在 mysql 中尝试过全文搜索,但该搜索只匹配单词而不是字符
我需要通过名单搜索并找出具有匹配百分比的相关匹配名称。例如,如果我有这样的名单,
Ramu
Rahim
Raju
Ravan
Mustafa
如果我给 Raheem 这样的名字,它会找出 Rahim 的名字并显示匹配的百分比,比如
Given Input:Raheem
Output:
Name Rahim match with the name Raheem 70%
我可以使用 MySql 满足我的要求吗?
注意:我在 mysql 中尝试过全文搜索,但该搜索只匹配单词而不是字符
有一个用于 mysql 的 UDF,您可以在这里找到:http: //joshdrew.com/
寻找:[2004-02-06] - MySQL Levenshtein Distance UDF
您可以使用 Levenshtein 距离来计算百分比差异。
这可能看起来像:
(min(length('hello'), length('hollo')) - LevDist('hello', 'hollo')) / min(length('hello'), length('hollo'))
您是否要求一种算法来比较字符串,或者如何在 sql 查询中使用这种算法?
如果您要问后者,请创建一个用户定义的函数,该函数根据 2 个输入字符串输出百分比,然后为表中的每个字符串选择并过滤百分比高于您要查找的任何阈值的位置。
所以像:
SELECT name, MyFuzzyStringComparer(name, @nameInQuestion) percentage
FROM nameTable
WHERE percentage > @threshold
ORDER BY percentage
如果您正在寻找比较算法,那么上面的回答似乎涵盖了它。