Azure搜索中将模糊搜索与同义词扩展相结合



我正在使用Microsoft.Azure.SearchSDK运行Azure认知服务搜索,其中包括同义词扩展。我的SynonymMap如下:

private async Task UploadSynonyms()
{
var synonymMap = new SynonymMap()
{
Name = "desc-synonymmap",
Synonyms = ""dog",  "cat", "rabbit"n "
};
await m_SearchServiceClient.SynonymMaps.CreateOrUpdateAsync(synonymMap);
}

这映射到Animal.Name,如下所示:

index.Fields.First(f => f.Name == nameof(Animal.Name)).SynonymMaps = new[] { "desc-synonymmap" };

我尝试使用模糊匹配和同义词匹配,例如:

  • 如果我搜索"dog",它会返回任何Animal,其中Name为"dog(狗("、"cat(猫("或"rabbit(兔子(">
  • 如果我搜索"dob",它将模糊匹配为"dog",并返回任何Animal,其中Name为"dog'、"cat"或"rabbit",因为它们都是"dog'的同义词

我的搜索方法如下:

private async Task RunSearch()
{          
var parameters = new SearchParameters
{
SearchFields = new[] { nameof(Animal.Name) },
QueryType = QueryType.Full
};
var results = await m_IndexClientForQueries.Documents.SearchAsync<Animal>("dog OR dog~", parameters);
}

当我搜索"dog"时,它会正确地返回任何结果,其中dog/cat/rabbit是它的Name。但当我搜索"dob"时,它只返回"dog"的任何匹配项,而不返回任何同义词。

来自2019年1月的这个回答指出;同义词扩展不适用于通配符搜索项;前缀、模糊和正则表达式术语不会展开"但这个答案是一年多前发布的,从那时起情况可能发生了变化。

在Azure认知搜索中,是否可以对同义词进行模糊匹配,然后进行匹配,或者有什么解决方法可以实现这一点?

@太空飞机

同义词扩展不适用于通配符搜索项;前缀、模糊和正则表达式术语未展开

不幸的是,这仍然成立参考:https://learn.microsoft.com/en-us/azure/search/search-synonyms

原因是所获得的单词/图形直接传递到索引中(根据本文档(。

话虽如此,我正在考虑两种可能的选择,以满足您的要求:

选项1

有一个本地模糊匹配器。在那里,您可以获得键入单词的可能匹配单词。

分享我发现的一个参考:链接1。我确实遇到了很多做类似任务的软件包。

现在,根据您获得的单词,您可以构建OR查询,绑定所有匹配的单词,并将其发布到Azure认知搜索。

举个例子:当dob~被激发时——假设";点,狗";将是由模糊逻辑代码生成的单词。

我们接受这两个词,随后发布";狗或点";查询到Azure。同义词反过来将是有效的,因为搜索词";狗;并且将基于同义图相应地检索结果。

选项2

您可以考虑使用同义词映射进行处理。例如,映射";狗;至";dob、dgo、dot";以及其他同义词。

最新更新