我如何才能最好地利用 Azure 搜索进行人物姓名匹配
How can I best leverage Azure Search for People name matching
我有一个包含超过一百万联系人的数据库,需要 return 最匹配 a) 用户查询和 b) 定期 运行 的批处理作业。关于人名匹配很复杂的争论并不多,我正在考虑不同的路线:
- 自己动手(给我们一些基本的东西让我们摆脱困境)。关于这个主题的很多好话题,例如 How to calculate score for Metaphone/Soundex name searching in .net
- 利用 Azure 搜索/认知技能:我们的平台已经在 Azure 中构建,使用 Azure 搜索可能比 (1) 更少的工作量和比 (3) 更小的跳跃
- 寻找 Azure 之外专门从事space 人名匹配(NetOwl/Basistech 等)的第 3 方。
鉴于我们的范围是解决西方人名的名字匹配问题,有人可以告诉我使用 Azure 搜索解决这个问题的优缺点吗?以下是我希望我们可以解决的一些 类 问题:
- 语音相似度:Jesus <=> Heyzeus
- 音译拼写差异:Abdul Rasheed <=> Abd al-Rashid
- 别名:威廉 <=> 威尔 <=> 比尔 <=> 比利
- 缺少 space 或连字符:MaryEllen <=> Mary Ellen <=> Mary-Ellen
- T运行 分类名称组成部分:McDonalds <=> McDonald <=> McD
- 可选名称标记:Joaquín Archivaldo Guzmán Loera <=> Joaquín Guzmán
- 姓名顺序变化:朴雪美 <=> 朴雪美
- 首字母缩写:J. E. Smith <=> James Earl Smith
在此先感谢您的指导和帮助。
西蒙.
有趣的案例!我相信这个解决方案没有正确或错误的答案,它还取决于预算和时间限制。您的主要数据源是什么?你是否在使用 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 以在用户键入时显示可能的结果。
我的回答不会直接解决所有问题,但它会给你一个开始。您将不得不对其进行大量测试和调整,因此您应该查看时间/预算限制。
我有一个包含超过一百万联系人的数据库,需要 return 最匹配 a) 用户查询和 b) 定期 运行 的批处理作业。关于人名匹配很复杂的争论并不多,我正在考虑不同的路线:
- 自己动手(给我们一些基本的东西让我们摆脱困境)。关于这个主题的很多好话题,例如 How to calculate score for Metaphone/Soundex name searching in .net
- 利用 Azure 搜索/认知技能:我们的平台已经在 Azure 中构建,使用 Azure 搜索可能比 (1) 更少的工作量和比 (3) 更小的跳跃
- 寻找 Azure 之外专门从事space 人名匹配(NetOwl/Basistech 等)的第 3 方。
鉴于我们的范围是解决西方人名的名字匹配问题,有人可以告诉我使用 Azure 搜索解决这个问题的优缺点吗?以下是我希望我们可以解决的一些 类 问题:
- 语音相似度:Jesus <=> Heyzeus
- 音译拼写差异:Abdul Rasheed <=> Abd al-Rashid
- 别名:威廉 <=> 威尔 <=> 比尔 <=> 比利
- 缺少 space 或连字符:MaryEllen <=> Mary Ellen <=> Mary-Ellen
- T运行 分类名称组成部分:McDonalds <=> McDonald <=> McD
- 可选名称标记:Joaquín Archivaldo Guzmán Loera <=> Joaquín Guzmán
- 姓名顺序变化:朴雪美 <=> 朴雪美
- 首字母缩写:J. E. Smith <=> James Earl Smith
在此先感谢您的指导和帮助。 西蒙.
有趣的案例!我相信这个解决方案没有正确或错误的答案,它还取决于预算和时间限制。您的主要数据源是什么?你是否在使用 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 以在用户键入时显示可能的结果。
我的回答不会直接解决所有问题,但它会给你一个开始。您将不得不对其进行大量测试和调整,因此您应该查看时间/预算限制。