【问题标题】:Azure Search - issues with Phonetic AnalyzerAzure 搜索 - 语音分析器的问题
【发布时间】:2017-07-18 00:53:00
【问题描述】:

我们的客户查询我们的 Azure 搜索索引,主要是为了人名。我们在所有领域都使用 Lucene 分析器。我们通过将客户端的输入名称变成一个短语来构建查询字符串,并添加接近率 3。因为我们使用短语进行搜索,所以我们不能使用 Lucene 分析器的模糊搜索功能,因为它只适用于单个单词。

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

  1. 分析仪的范围如此之广,以至于它会带回很多误报。例如,在 Kenneth Gooden 上搜索时,它会返回 Kenneth Cotton。在我们看来,这有点太远了,不能被认为是语音上的相似。是否可以以任何方式调整灵敏度,或者可以采取一些措施来提高其他一些参数来解决这个问题?

  2. 在 Barry Soper 上进行搜索时,返回的第一个也是得分最高的结果是“Barry Spear”。第二个结果,得分较低,是“Soper,Barry Russell”。在某种程度上,我可以也许明白为什么它会这样得分(第二个的 b/c 是姓氏),但后来......不是真的。第二个结果包含所需接近度内的两个确切术语。也许 Azure 搜索在应用分析器之前优先考虑短语中的单词顺序?对我来说仍然没有意义。 (旁注 - 此查询还带回“Barh Super” - 请参阅上面的问题 #1)

我想知道是否有人可以提供建议来调整 Azure 搜索的行为,使其更符合我们的需要,或者,也许可以建议语音分析器的替代方案。我们还没有尝试任何其他可用的语音算法,只有 b/c 似乎 Metaphone 是最好的和最常用的。但我们也愿意接受有关其他算法的建议。

谢谢。

【问题讨论】:

    标签: lucene azure-cognitive-search


    【解决方案1】:

    您是正确的,模糊运算符仅适用于单个术语。在这种情况下,您可以使用自定义分析器(语音标记过滤器)或同义词功能(预览版)。我不确定您所说的“我们刚刚在索引中实现了 Metaphone 算法”是什么意思,但是您可以在 Azure 搜索 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。非常感激!我现在开始深入研究你的建议。仅供参考,关于“我们刚刚在索引中实现了 Metaphone 算法” Azure 搜索允许您从此处看到的几种不同的语音分析器算法中进行选择:commons.apache.org/proper/commons-codec/archives/1.10/apidocs/… 我们已经实现了 Metaphone。
    猜你喜欢
    • 2021-10-30
    • 2021-09-02
    • 1970-01-01
    • 1970-01-01
    • 2021-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多