2

我正在尝试在 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);

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

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

到现在为止还挺好。现在,如果我搜索product0123 ,我会得到product123的结果,如我所料。但是,如果我搜索短语产品 123产品 0123,我会得到一堆不相关的结果。就好像同义词映射不适用于多词项目。

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

4

1 回答 1

4

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

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

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

内特

于 2018-07-05T23:14:35.027 回答