我有一个超过一百万个联系人的数据库,需要返回与a)用户查询和b)定期运行的批处理作业的最佳匹配。人们名字匹配很复杂的争论不多,我正在考虑不同的路线:
鉴于我们的工作范围是解决西式人物姓名的姓名匹配问题,有人能给我使用Azure搜索解决此问题的利弊吗?我希望我们可以解决以下一些问题:
在此先感谢您提供任何指导和帮助。 西蒙。
答案 0 :(得分:0)
有趣的情况!我相信此解决方案没有正确或错误的答案,而且还取决于预算和时间限制。您的主要数据源是什么?您是否正在使用Azure认知搜索索引器的受支持来源,例如SQL或CosmosDB。联系人如何存储?名和姓分开,还是所有内容都在一个字段中?
由于您主要是在寻找有关Azure认知搜索的指南,因此我将介绍如何尝试使用Azure认知搜索解决此情况。希望它将帮助您确定最适合您目的的技术。
我在所有情况下都没有经验,如果您有更好的建议,请评论此帖子,我将对其进行更新。在一些类似的主题中,他们使用不同的技术,但是具有相同的Lucene查询语法和一些标记器。
语音相似度:耶稣<=> Heyzeus
您可以添加PhoneticTokenFilter
,在其中可以根据具体情况选择性能最佳的encoder。
音译的拼写差异:Abdul Rasheed <=> Abd al-Rashid
Fuzzy search是一个选择,但是上面的示例太不同了。
别名:William <=> Will <=> Bill <=> Billy
如果有此数据,则可以使用SynonymMaps
。
缺少空格或连字符:MaryEllen <=> Mary Ellen <=> Mary-Ellen
您可以使用tokenizer来删除空格和标点符号。
姓名名称的截断部分:麦当劳<=>麦当劳<=> McD
如果您有此数据,则可以使用SynonymMaps
。但是我认为模糊搜索已经可以完成工作。
可选的名称令牌:JoaquínArchivaldoGuzmánLoera <=>JoaquínGuzmán 您可以利用Proximity search。
名称顺序变化:Park Sol Mi <=> Sol Mi Park
还取决于字段的存储方式,但是我认为邻近搜索也可以解决这种情况。
姓名首字母:J. E. Smith <=> James Earl Smith
您可以将tokenizer与模糊搜索结合使用。不确定这种情况。
一个不错的补充是,您还可以提供suggestions and/or autocomplete来向用户显示键入期间可能的结果。
我的答案并不能直接解决所有问题,但是可以帮助您开始。您将不得不对其进行大量测试和调整,因此您应该查看时间/预算约束。