在 Azure 认知搜索中,如何匹配带有连字符的字段?

时间:2021-06-10 07:20:36

标签: azure azure-cognitive-search

使用 Azure 搜索,我希望人们可以找到与其输入相匹配的文件,即使他们忘记了连字符“-”或用空格“”代替。

例如,我有一个包含以下内容的文档:“F-150”。 我希望搜索返回以下搜索结果:“F-150”、“F150”和“F 150”。

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

为了解决这个问题,我们在搜索中添加了一个字符过滤器,将连字符替换为空。

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

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

我也尝试添加此过滤器来尝试替换空格:

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

但这似乎无济于事。

所以现在我被困在该怎么办,想知道是否有解决方案来解决这个问题?

更新

因此,我创建了 2 个名为“ModelEdited”和“TypeEdited”的新字段,它们具有与“Model”和“Type”字段相同的设置,但这些编辑过的字段使用“替换连字符”作为分析器。那行得通。

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

1 个答案:

答案 0 :(得分:0)

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