如何解决在Azure搜索中将模糊搜索与同义词扩展相结合
我正在使用Microsoft.Azure.Search
SDK来运行包含同义词扩展名的Azure Cognitive Services搜索。我的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" };
我正在尝试同时使用模糊匹配和同义词匹配,例如:
- 如果我搜索“狗”,它将返回
Animal
为“狗”,“猫”或“兔子”的任何Name
- 如果我搜索“ dob”,它将与“ dog”模糊匹配,并返回
Animal
为“ dog”,“ cat”或“ rabbit”的Name
,因为它们都是同义词为“狗”
我的搜索方法如下:
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为名称的任何结果。但是当我搜索“ dob”时,它仅返回“ dog”的所有匹配项,而不返回任何同义词。
This answer from January 2019指出“同义词扩展名不适用于通配符搜索词;前缀,模糊和正则表达式词不扩展。”但是此答案是一年多以前发布的,此后情况可能有所改变。
是否可以同时进行模糊匹配,然后在Azure认知搜索中对同义词进行匹配,或者是否有解决方法来实现这一目标?
解决方法
@spaceplane
同义词扩展名不适用于通配符搜索词;前缀,模糊和正则表达式项不会扩展
不幸的是,这仍然成立。 参考:https://docs.microsoft.com/en-us/azure/search/search-synonyms
将获得的单词/图形直接传递给索引(根据此doc)。
话虽如此,我在想两个可能满足您要求的选择:
选项1
具有本地模糊匹配器。您可以在其中获得键入单词的可能匹配单词。
分享我发现的参考:Link 1。我确实遇到了很多完成类似任务的软件包。
现在,从获取的单词中,您可以建立 OR 查询,将所有匹配的单词绑定在一起,并将其发布到Azure认知搜索。
因此,在一个实例中:当dob〜被触发时-假设“点,狗”是模糊逻辑代码生成的单词。
我们使用这两个词,然后向Azure发出“狗或点”查询。反过来,由于搜索词“ dog”,同义词将有效,并且将根据同义词映射表相应地检索结果。
选项2
您可以考虑使用同义词映射表进行处理。例如,将“ dog”以及其他同义词映射到“ dob,dgo,dot”。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。