我试图在Azure搜索中使用同义词地图,我遇到了一个问题。我想有几个词和短语映射到一个单一的搜索查询。
换句话说,当我搜索的时候:
产品123,product0123,产品0123
我希望搜索返回查询短语的结果:
product123。
在阅读了教程之后,一切看起来都很直接。
我使用的是.Net Azure.Search SDK5.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,我会得到一堆不相关的结果。几乎就像同义词映射不适用于多个单词项一样。
所以,我的问题是,我是不正确地使用同义词映射,还是这些映射只适用于单个单词的同义词?
发布于 2018-07-05 23:14:35
product 123或product 0123的短语是双引号吗?短语必须是双引号("product 123")。双引号是短语搜索的运算符,在同义词情况下,它们确保分析短语中的术语,并将其与同义词地图中的规则作为短语进行匹配。没有它,查询解析器将未引用的短语分离为单个术语,并尝试对单个术语进行同义词匹配。在这种情况下,查询变成product OR 123。
这份文件解释了如何解析查询(第一阶段)和如何分析查询(第二阶段)。同义词在第二阶段的应用。
为了回答你在评论中的第二个问题,不幸的是,需要双引号来匹配多个单词同义词。但是,作为应用程序开发人员,您可以完全控制传递给搜索服务的内容。例如,给定来自用户的查询product 123,您可以在查询被传递到搜索服务之前重写这个查询,以提高查询的准确性和召回率。短语搜索或邻近搜索可用于提高精度,而通配符(如模糊或前缀搜索)可用于提高查询的召回率。您将将查询product 123重写为类似于"product 123"~10 product 123的内容,同义词将应用于查询的短语部分。
内特
https://stackoverflow.com/questions/51200616
复制相似问题