Azure 搜索中的同义词映射、同义词短语

Shr*_*kus 3 synonym azure-cognitive-search azure-search-.net-sdk

我尝试在 Azure 搜索中使用同义词映射,但遇到了问题。我希望将多个单词和短语映射到单个搜索查询中。

换句话说,当我搜索:

产品 123 ,产品 0123 ,产品 0123

我希望搜索返回查询短语的结果:

产品123。

阅读完教程后,一切似乎都非常简单。

我正在使用 .Net Azure.Search SDK 5.0,因此我执行了以下操作:

var synonymMap = new SynonymMap
{
     Name = "test-map",
     Format = SynonymMapFormat.Solr,
     Synonyms = "product 123, product0123, product 0123=>product123\n"
};  
_searchClient.SynonymMaps.CreateOrUpdate(synonymMap);
Run Code Online (Sandbox Code Playgroud)

我在其中一个搜索字段上使用地图

index.Fields.First(x => x.Name == "Title").SynonymMaps = new[] {"test-map"};
Run Code Online (Sandbox Code Playgroud)

到目前为止,一切都很好。现在,如果我搜索product0123,我会得到product123的结果,正如我所期望的那样。但如果我搜索短语“产品 123”或“产品 0123”,我会得到一堆不相关的结果。同义词映射几乎不适用于多词项。

所以我的问题是,我是否错误地使用了同义词映射表,或者这些映射表仅适用于单个单词同义词?

Nat*_* Ko 5

短语product 123orproduct 0123是否用双引号引起来?短语必须用双引号 ( "product 123") 括起来。双引号是短语搜索的运算符,在同义词的情况下,它们确保短语中的术语作为短语根据同义词映射中的规则进行分析和匹配。如果没有它,查询解析器会将未引用的短语分隔为各个术语,并尝试对各个术语进行同义词匹配。product OR 123在这种情况下,查询就变成了。

本文档解释了如何解析查询(第 1 阶段)和分析(第 2 阶段)。同义词的应用在第二阶段完成。

要回答评论中的第二个问题,不幸的是需要双引号来匹配多词同义词。但是,作为应用程序开发人员,您可以完全控制传递给搜索服务的内容。例如,给定product 123用户的查询,您可以在后台重写查询,以在将其传递到搜索服务之前提高精确度和召回率。短语或邻近搜索可用于提高精确度,通配符(例如模糊或前缀搜索)可用于提高查询的召回率。您可以将查询重写product 123为类似的内容"product 123"~10 product 123,同义词将应用于查询的短语部分。

内特