我如何才能最好地利用 Azure 搜索进行人物姓名匹配

How can I best leverage Azure Search for People name matching

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

  1. 自己动手(给我们一些基本的东西让我们摆脱困境)。关于这个主题的很多好话题,例如 How to calculate score for Metaphone/Soundex name searching in .net
  2. 利用 Azure 搜索/认知技能:我们的平台已经在 Azure 中构建,使用 Azure 搜索可能比 (1) 更少的工作量和比 (3) 更小的跳跃
  3. 寻找 Azure 之外专门从事space 人名匹配(NetOwl/Basistech 等)的第 3 方。

鉴于我们的范围是解决西方人名的名字匹配问题,有人可以告诉我使用 Azure 搜索解决这个问题的优缺点吗?以下是我希望我们可以解决的一些 类 问题:

在此先感谢您的指导和帮助。 西蒙.

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

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

我也不是所有情况都有经验,如果有更好的建议请评论这个post,我会更新的。有几个类似的主题,他们使用不同的技术,但使用相同的 Lucene 查询语法和一些分词器。

语音相似度:Jesus <=> Heyzeus

您可以添加 PhoneticTokenFilter, where you can select the encoder 以针对您的具体情况提供最佳性能。

音译拼写差异:Abdul Rasheed <=> Abd al-Rashid

Fuzzy search 可能是一个选项,但是上面的例子太不一样了。

别名:William <=> Will <=> Bill <=> Billy

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

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

您可以使用 tokenizer 来删除空格和 punctuation/symbols。

截断的名称组成部分:McDonalds <=> McDonald <=> McD 如果您有此数据,则可以使用 SynonymMaps。但是我认为模糊搜索已经可以完成这项工作了。

可选名称标记:Joaquín Archivaldo Guzmán Loera <=> Joaquín Guzmán 您可以利用 Proximity search.

姓名顺序变化:Park Sol Mi <=> Sol Mi Park

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

姓名首字母:J.E.史密斯 <=> 詹姆斯·厄尔·史密斯

您可以将 tokenizer 与模糊搜索结合使用。不确定这种情况。

一个不错的补充是,您还可以提供 suggestions and/or autocomplete 以在用户键入时显示可能的结果。

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