在Azure Search中的同义词映射,同义词短语

3

我正在尝试在Azure搜索中使用同义词映射,但遇到了问题。 我想让几个单词和短语映射到一个搜索查询中。

换句话说,当我搜索以下内容时:

product 123, product0123, product 0123

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

product123

阅读完教程后,一切似乎都很简单明了。

我正在使用.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的结果,这是我所期望的。但是,如果我搜索一个短语product 123product 0123,我会得到一堆无关的结果。几乎可以说同义词映射不能与多个单词的项一起使用。
因此,我的问题是,我是否错误地使用了同义词映射,或者这些映射只能与单个单词的同义词一起使用?
1个回答

5

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

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

很抱歉,为了匹配多词同义词,双引号是必需的。然而,作为应用程序开发人员,您可以完全控制传递给搜索服务的内容。例如,当用户查询“产品123”时,您可以在传递给搜索服务之前在幕后重新编写查询以提高精度和召回率。可以使用短语或接近搜索来提高精度,可以使用通配符(例如模糊或前缀搜索)来提高查询的召回率。您将查询“产品123”重写为类似于“"product 123"~10 product 123”的内容,同义词将应用于查询的短语部分。

谢谢你的建议,Nate。我之前检查过双引号,但好像没有起作用。不过我刚刚再次测试了一下,确实是双引号解决了问题。但问题在于,从用户的角度来看,使用引号可能不是显而易见的解决方案。我们被聪明的谷歌搜索宠坏了。你有什么建议可以在不使用引号的情况下实现我想要的结果吗? - Shraibikus
嗨Shraibikus,我在原始答案的评论中包含了对你问题的回答。 - Nate Ko

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接