我正在尝试在Azure搜索中使用同义词映射,但遇到了问题。我想将多个单词和短语映射到一个搜索查询中。
换句话说,当我搜索其中之一时:
产品123,product0123,产品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,则会得到一堆无关的结果。这几乎就像同义词映射不适用于多词项。
所以,我想我的问题是,我是否正确使用了同义词映射表,或者这些映射仅适用于单个单词的同义词?
短语product 123
或是否product 0123
用双引号引起来?短语必须用双引号("product 123"
)表示。双引号是短语搜索的运算符,对于同义词来说,双引号可确保对短语中的术语进行分析并与同义词图中作为短语的规则匹配。没有它,查询解析器会将未加引号的短语分隔为单个词,然后尝试对单个词进行同义词匹配。product OR 123
在这种情况下,查询变为。
本文档说明了如何解析查询(阶段1)和分析查询(阶段2)。同义词的应用在第二阶段完成。
要回答评论中的第二个问题,不幸的是,必须使用双引号来匹配多词同义词。但是,作为应用程序开发人员,您可以完全控制传递给搜索服务的内容。例如,给定product 123
来自用户的查询,您可以在幕后重新编写查询,以提高准确性和在将查询传递给搜索服务之前对其进行重新调用。短语搜索或邻近搜索可用于提高精度,通配符(例如模糊或前缀搜索)可用于提高查询的查全率。您将查询重写为product 123
类似的内容,"product 123"~10 product 123
并且同义词将应用于查询的短语部分。
内特
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句