2017-07-18 73 views
0

我们的客户在我们的Azure搜索索引上进行查询,主要针对人名。我们在所有的领域都使用Lucene分析器。我们通过将客户端的输入名称变为短语来建立查询字符串,并将接近率增加为3.因为我们使用短语进行搜索,所以我们不能使用Lucene分析器的模糊搜索功能,因为它只能处理单个单词。Azure搜索 - 语音分析仪问题

因此,我们正在寻找一种解决方案,以便能够带回与客户输入的拼写完全不匹配的名称的结果。我们遇到了语音分析器,并且刚刚在我们的索引中实施了Metaphone算法。我们运行一些测试,虽然它会让我们更接近我们所需要的,我们还是看到了一些问题:

  1. 分析仪的范围是如此之广,它勾起了我很多误报。例如,当搜索肯尼思古登时,它带回肯尼思棉花。在我们看来,这只是有点太远而不能被认为在语音上相似。敏感度是否可以以任何方式进行调整,或者可以采取一些措施来提高一些其他参数来弥补这一点?

  2. 在Barry Soper搜索时,第一个得分最高的结果是“Barry Spear”。第二项得分较低的结果是“Soper,Barry Russell”。在某种程度上,我可以也许明白为什么它的得分方式(第二个名字是第一个名字的第一个),但然后......不是真的。第二个结果包含所需的接近度内的两个精确词。也许在应用分析器之前,Azure搜索会优先考虑短语中的单词顺序?对我仍然没有意义。 (附注 - 这个查询也带回了“巴尔超级” - 见上述问题#1)

我想知道,如果有人可以提供建议,以调整Azure的搜索行为沿着什么样的线条更加努力我们需要,或者,也许建议替代语音分析仪。我们还没有尝试任何其他可用的语音算法,但只有B/C看起来,Metaphone是最好的和最常用的。但我们也乐于接受有关其他算法的建议。

谢谢。

回答

2

模糊运算符只适用于单项,这是正确的。在这种情况下,您可以使用自定义分析器(拼音tokenfilter)或同义词功能(预览中)。我不确定您的意思是“我们刚刚在我们的索引中实施了Metaphone算法”,但您可以从Azure Search custom analysis stack中选择几种语音标记筛选器。同义词是仅在预览中可用的较新功能,您可以查看here。对于同义词,您需要定义同义词规则,例如说'Nate,Nathan,Nathaniel',并且在查询时间内,搜索一个自动包含其他结果。

好的,那我该如何使用这些积木来控制我搜索的相关性呢?模型的一种方法是为每个扩展策略使用单独的字段。例如,您可以有三个字段,分别是'name','name_synonym'和'name_phonetic',而不是名称的单个字段。第一个字段'name'用于完全匹配,'name_synonym'字段具有同义词,第三个字段使用语音分析器并最大限度扩大搜索范围。然后你可以使用scoring profile来提高每场比赛的分数。例如,您可以为精确匹配提供10的提升值,为同义词提供5的提升值,为语音扩展提供1。您的搜索将针对这三个内部字段发布。

关于你为什么'Soper,Barry Russell'排名低于'Barry Spear'的问题。语音分析后。'soper'和'spear'这两个词在索引和查询时都缩减为相同的形式,并被当作是相同的术语。在计算分数和排名时,搜索引擎使用分析形式的词语和语音相似性不影响分数。这就是为什么次要因素,如场地长度,将影响相关性分数发挥更重要的作用。

希望这会有所帮助。我提供了一个示例来建模,但您也可以看看term boosting in the full lucene query syntax

让我知道你是否还有其他问题。

Nate

+0

非常详细和有益的回应,内特。不胜感激!我现在开始深入研究你的建议。仅供参考,关于“我们刚刚在我们的索引中实现了Metaphone算法”,Azure Search允许您从以下几种不同的语音分析器算法中进行选择:http://commons.apache.org/proper/commons-codec/archives/1.10 /apidocs/org/apache/commons/codec/language/package-summary.html我们已经实现了Metaphone。 – Stpete111