C# Azure搜索,精确短语匹配

C# Azure搜索,精确短语匹配,c#,azure,azure-cognitive-search,C#,Azure,Azure Cognitive Search,我们有一个azure web应用程序,其中有一个搜索框,当我们输入带有双引号的文本(如“App Service”)时,它会列出带有“App Service”的记录,但它也包括在单词(如“App/Service”)之间带有特殊字符的记录。我们希望搜索引擎返回与搜索短语完全匹配的记录(不包括搜索词之间具有特殊字符的记录) 在此场景中,您希望将字段的整个内容作为单个标记进行索引。请看一看,尤其是关键字分析器。在您的案例中,标准分析器在索引时将术语应用程序/服务分为两个单独的术语应用程序和服务。这就是为

我们有一个azure web应用程序,其中有一个搜索框,当我们输入带有双引号的文本(如“App Service”)时,它会列出带有“App Service”的记录,但它也包括在单词(如“App/Service”)之间带有特殊字符的记录。我们希望搜索引擎返回与搜索短语完全匹配的记录(不包括搜索词之间具有特殊字符的记录)

在此场景中,您希望将字段的整个内容作为单个标记进行索引。请看一看,尤其是
关键字
分析器。

在您的案例中,
标准
分析器在索引时将术语应用程序/服务分为两个单独的术语应用程序服务。这就是为什么短语“App Service”与文档匹配为App/Service——这两个版本在搜索引擎看来都是一样的

如果术语App/Service构成字段内容的全部,则可以使用
关键字
分析器将该字段的内容作为单个标记进行索引。在此处了解更多信息:

如果术语App/Service作为句子的一部分出现,那么
关键字
分析器将不是一个好的选择。在这种情况下,您可以将
/
字符替换为
标准
标记器不拆分的另一个字符,例如:
\uuu
。使用
mapping
字符标记过滤器:

charFilters: [
  {
    "name":"map_char_mapping",
    "@odata.type":"#Microsoft.Azure.Search.MappingCharFilter",
    "mappings":[ "/=>_" ]
  }     
] 

下面的帖子将帮助您了解词法分析器在搜索和索引时是如何应用的:

Hi@Eugene,感谢您的回复,难道没有办法忽略中间有特殊字符的记录吗?自定义分析器似乎不可行。