模糊名称匹配算法

use*_*549 5 sql-server fuzzy-logic

我有一个数据库,其中包含某些列入黑名单的公司和个人的姓名。创建的所有交易及其详细信息都需要根据这些列入黑名单的名称进行扫描。创建的交易的名称可能拼写不正确,例如可以将“Wilson”写为“Wilson”、“Vilson”或“Veelson”。模糊搜索逻辑或实用程序应与黑名单数据库中存在的名称“Wilson”进行匹配,并且基于用户设置的所需正确性/准确性百分比,必须显示百分比集中的匹配名称。

交易将批量或实时发送,以检查是否列入黑名单。

如果有类似需求并已实现的用户也能给出他们的看法和实现方式,我将不胜感激

dko*_*h74 4

T-SQL 在模糊搜索领域还有很多不足之处。最好的选择是第三方库,但如果您不想弄乱它,最好的选择是使用 SQL Server 内置的 DIFFERENCE 函数。例如:

SELECT * FROM tblUsers U WHERE DIFFERENCE(U.Name, @nameEntered) >= 3
Run Code Online (Sandbox Code Playgroud)

DIFFERENCE 的返回值越高表示精度越高。这样做的缺点是该算法更喜欢听起来相似的单词,这可能不是您想要的特征。

下一个示例展示了如何从表中获取最佳匹配:

DECLARE @users TABLE (Name VARCHAR(255))

INSERT INTO @users VALUES ('Dylan'), ('Bob'), ('Tester'), ('Dude')

SELECT *, MAX(DIFFERENCE(Name, 'Dillon')) AS SCORE FROM @users GROUP BY Name ORDER BY SCORE DESC
Run Code Online (Sandbox Code Playgroud)

它返回:

 Name | Score
 Dylan  4
 Dude   3
 Bob    2
 Tester 0
Run Code Online (Sandbox Code Playgroud)