【问题标题】:Synonym Maps in Azure Search, synonym phrasesAzure 搜索中的同义词映射、同义词短语
【发布时间】:2018-12-14 11:39:09
【问题描述】:

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

换句话说,当我搜索任一时:

产品 123product0123产品 0123

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

product123.

阅读tutorial 之后,一切看起来都非常简单。

我正在使用 .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,我会得到一堆不相关的结果。就好像同义词映射不适用于多词项目。

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

【问题讨论】:

    标签: azure-cognitive-search synonym azure-search-.net-sdk


    【解决方案1】:

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

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

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

    内特

    【讨论】:

    • 感谢内特的提示。我以为我之前检查了双引号,但他们什么也没做,但我只是再次测试了它,是的,双引号可以解决问题。问题是我担心从用户的角度来看,使用引号不会是明显的解决方案。我们被智能谷歌搜索宠坏了。关于如何在不使用搜索短语中的引号的情况下获得我想要的结果,您有什么建议吗?
    • 嗨 Shraibikus,我在原始答案的评论中包含了您问题的答案。
    猜你喜欢
    • 2019-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多