我如何最好地利用Azure Search for People名称匹配

时间:2019-11-05 17:33:27

标签: azure-cognitive-search

我有一个超过一百万个联系人的数据库,需要返回与a)用户查询和b)定期运行的批处理作业的最佳匹配。人们名字匹配很复杂的争论不多,我正在考虑不同的路线:

  1. 滚动自己的角色(给我们一些基本知识以使我们脱颖而出)。关于该主题的很多好话题,例如How to calculate score for Metaphone/Soundex name searching in .net
  2. 利用Azure搜索/认知技能:我们的平台已内置于Azure中,使用Azure搜索的工作量可能比(1)少,并且跳动的可能性小于(3)
  3. 在Azure之外寻找专门用于人名匹配的第三方(NetOwl / Basistech /等)。

鉴于我们的工作范围是解决西式人物姓名的姓名匹配问题,有人能给我使用Azure搜索解决此问题的利弊吗?我希望我们可以解决以下一些问题:

  • 语音相似度:耶稣<=> Heyzeus
  • 音译的拼写差异:Abdul Rasheed <=> Abd al-Rashid
  • 备用名称:William <=> Will <=> Bill <=> Billy
  • 缺少空格或连字符:MaryEllen <=> Mary Ellen <=> Mary-Ellen
  • 截断的名称组成部分:麦当劳<=>麦当劳<=> McD
  • 可选名称令牌:JoaquínArchivaldoGuzmánLoera <=>JoaquínGuzmán
  • 名称顺序变化:Park Sol Mi <=> Sol Mi Park
  • 首字母缩写:J。E. Smith <=> James Earl Smith

在此先感谢您提供任何指导和帮助。 西蒙。

1 个答案:

答案 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来向用户显示键入期间可能的结果。

我的答案并不能直接解决所有问题,但是可以帮助您开始。您将不得不对其进行大量测试和调整,因此您应该查看时间/预算约束。