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



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

  1. 自己滚(给我们一些基本的东西,让我们走出障碍(。关于这个主题有很多好的线索,比如如何在.net中计算Metaphone/Soundex名称搜索的分数
  2. 利用Azure搜索/认知技能:我们的平台已经在Azure中构建,使用Azure搜索可能比(1(工作量更小,跳跃也比(3(更小
  3. 看看Azure之外专门从事人名匹配领域的第三方(NetOwl/Basicstech/等(

鉴于我们致力于解决西式人名的名称匹配问题,有人能告诉我使用Azure Search解决这个问题的利弊吗?以下是我希望我们能够解决的一些问题:

  • 语音相似性:耶稣海泽斯
  • 音译拼写差异:Abdul-Rasheed<=>阿布德·拉希德
  • 备选名称:William<=>Will<=>账单<=>Billy
  • 缺少空格或连字符:MaryEllen<=>Mary EllenMary Ellen
  • 截断名称组件:McDonalds<=>麦当劳<=>McD
  • 可选名称标记:Joaquín Archivaldo Guzmán Loera<=>Joaquín Guzmán
  • 名称顺序变化:Park Sol Mi<=>Sol-Mi公园
  • 首字母缩写:J.E.Smith<=>詹姆斯·厄尔·史密斯

提前感谢您的指导和帮助。西蒙。

有趣的案例!我认为这个解决方案没有对错之分,也将取决于预算和时间限制。您的主要数据源是什么?你是否使用Azure认知搜索索引器的支持源,如SQL或CosmosDB。联系人是如何存储的?名字和姓氏是分开的,还是所有内容都在一个字段中?

由于您主要是在寻找有关Azure认知搜索的指导,我将描述如何尝试使用Azure认知搜索解决此问题。希望它能帮助你决定哪种技术最适合你的目的。

我不是在所有情况下都有经验,如果你有更好的建议,请评论这篇文章,我会更新它。有一些类似的主题,他们使用不同的技术,但使用相同的Lucene查询语法和一些标记器。

语音相似性:耶稣Heyzeus

您可以添加PhoneticTokenFilter,在那里您可以为您的特定情况选择性能最佳的编码器。

音译拼写差异:Abdul Rasheed<=>阿布德·拉希德

模糊搜索可能是一种选择,但是上面的例子太不一样了。

备选名称:William<=>Will<=>账单<=>Billy

如果您有这些数据,您可以使用SynonymMaps

缺少空格或连字符:MaryEllen<=>Mary EllenMary Ellen

您可以使用一个标记器来删除空白和标点符号。

截断名称组件:McDonalds<=>麦当劳<=>McD如果您有此数据,则可以使用SynonymMaps。然而,我认为模糊搜索已经可以完成这项工作了。

可选名称标记:Joaquín Archivaldo Guzmán Loera<=>Joaquín Guzmán您可以利用邻近搜索。

名称顺序变化:Park Sol Mi<=>Sol-Mi公园

这也取决于字段的存储方式,但我认为邻近搜索也可以解决这种情况。

首字母缩写:J.E.Smith<=>James Earl Smith

你可以将标记化器与模糊搜索结合使用。。不确定这个案子。

一个很好的补充是,您还可以提供建议和/或自动完成,向用户显示键入过程中可能的结果。

我的答案不会直接解决所有的问题,但它会给你一个开始。您将不得不对其进行大量测试和调整,因此您应该了解时间/预算限制。

最新更新