我们的客户查询我们的Azure搜索索引,主要是针对人们的姓名。我们在所有领域都使用Lucene分析仪。我们通过将客户端的输入名称转换为短语并添加接近率3来构建查询字符串。因为我们使用短语进行搜索,所以我们不能使用Lucene分析器的模糊搜索功能,因为它只适用于单个单词。
因此,我们正在寻找一种解决方案,以便能够使用与客户端输入完全拼写不完全拼写的名称来恢复结果。我们遇到了语音分析器,并且刚刚将Metaphone算法实现到我们的索引中。我们已经进行了一些测试,虽然它让我们更接近我们需要的东西,但我们仍然看到了一些问题:
分析仪的范围非常广泛,它带来了许多误报。例如,在Kenneth Gooden上搜索时,它带回了Kenneth Cotton。在我们看来,这在某种程度上被认为在语音上是相似的。是否可以以任何方式调整灵敏度,或者可以采取措施来增加其他一些参数来解决这个问题?
在对Barry Soper进行搜索时,第一个得分最高的结果是“Barry Spear”。得分较低的第二个结果是“Soper,Barry Russell。”在某种程度上,我可以也许看看为什么它得分那样(第二个b / c是姓氏的第一个)然后......不是真的。第二个结果包含所需邻近范围内的两个确切术语。在应用分析器之前,Azure搜索是否优先考虑短语中单词的顺序?对我来说仍然没有意义。 (旁注 - 此查询还会带回“Barh Super” - 请参阅上面的问题#1)
我想知道是否有人可以提供建议来调整Azure搜索的行为,使其更符合我们的需要,或者,或许建议替代语音分析器。我们还没有尝试过任何其他可用的语音算法,只有b / c似乎Metaphone是最好的和最常用的。但我们也对其他算法的建议持开放态度。
感谢。
答案 0 :(得分:2)
你是正确的,模糊运算符只适用于单个术语。在这种情况下,您可以使用自定义分析器(语音标记过滤器)或同义词功能(在预览中)。我不确定你的意思是什么"我们刚刚将Metaphone算法实现到我们的索引"但是您可以在Azure搜索custom analysis stack中选择几种语音令牌过滤器。同义词是一种仅在预览中可用的新功能,您可以查看here。对于同义词,您需要定义同义词规则,比如Nate,Nathan,Nathaniel'例如,在查询时,搜索一个会自动包含其他人的结果。
好的,那么我应该如何使用这些构建块来控制搜索的相关性?建模的一种方法是为每个扩展策略使用单独的字段。例如,您可以使用三个字段代替名称的单个字段,例如' name',' name_synonym'和' name_phonetic'。第一个字段名称'是用于完全匹配," name_synonym' field启用了同义词,第三个使用了语音分析器并扩大了搜索范围。然后,您可以使用scoring profile来提高每个字段中匹配的分数。例如,您可以为完全匹配提供10的提升值,为同义词提供5,为语音扩展提供1。您的搜索将针对这三个内部字段发布。
关于为什么' Soper,Barry Russell'排名低于Barry Spear'。经过语音分析。单词' soper'和#矛;'在索引和查询时减少到相同的形式,并将它们视为相同的术语。在计算得分和排名时,搜索引擎使用术语的分析形式,并且语音相似性对得分没有影响。这就是为什么,次要因素,如场长,将在影响相关性得分方面发挥更重要的作用。
希望这会有所帮助。我提供了一个示例来对此进行建模,但您也可以查看term boosting in the full lucene query syntax。
如果您有任何其他问题,请与我们联系。
内特