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