在 Azure 认知搜索中,如何匹配其中包含连字符的字段?

In Azure Cognitive Search how do you match on fields with a hyphen in it?

使用 Azure 搜索我想让人们找到与其输入匹配的文件,即使他们忘记了连字符“-”或用 space“”代替它。

例如,我有一份文件,其中包含以下内容:“F-150”。 我希望在以下搜索中获得 return 结果:“F-150”、“F150”和“F 150”。

默认情况下,Azure 搜索将匹配“F-150”和“F 150”,因为它将连字符“-”视为术语中的拆分,就像 space 一样。但它与组合术语“F150”不匹配。

为了解决这个问题,在搜索中添加了一个 charfilter,用空字符替换连字符。

"charFilters": [
 {
   "name":"replace hyphen character",
   "@odata.type":"#Microsoft.Azure.Search.MappingCharFilter",
   "mappings":["-=>"]
 }
]

使用它之后,它现在与“F150”术语匹配,并且仍然与“F-150”匹配,但现在它不再与“F 150”匹配。

我也尝试添加这个过滤器来尝试替换 space:

{
      "name":"replace space character",
      "@odata.type":"#Microsoft.Azure.Search.MappingCharFilter",
      "mappings":["\u0020=>"]
}

但这似乎无济于事。

所以我现在卡住了,想知道是否有办法解决这个问题?

更新

所以我创建了 2 个名为“ModelEdited”和“TypeEdited”的新字段,它们与“Model”和“Type”字段具有相同的设置,只是这些编辑的字段使用“replace hyphen”作为分析器。行得通。

"fieldMappings":[
      { "sourceFieldName" : "Model", "targetFieldName" : "ModelEdited" },
      { "sourceFieldName" : "Type", "targetFieldName" : "Typedited" }
  ]

您不需要只使用一个字段来解决它,您可以创建第二个字段作为原始字段的副本,您可以在其中使用默认分析器。然后,在搜索时,您将在两个字段中进行搜索。