【问题标题】:In Azure Cognitive Search how do you match on fields with a hyphen in it?在 Azure 认知搜索中,如何匹配带有连字符的字段?
【发布时间】:2022-04-12 03:00:08
【问题描述】:

使用 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" }
  ]

【问题讨论】:

    标签: azure azure-cognitive-search


    【解决方案1】:

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

    【讨论】:

    • 好主意,我也在考虑这样做。但是真的找不到在不更改我的数据的情况下复制 Azure 搜索中的术语的方法。是否有可能在不更改搜索文档的情况下实现这一目标?
    • 是的,您不需要更改数据中的任何内容,只需使用不同的分析器
    • 我尝试过这样的事情,我用我尝试过的东西更新了我的答案。现在我在尝试创建索引时遇到错误。
    猜你喜欢
    • 2021-11-26
    • 2021-07-03
    • 2021-10-18
    • 2021-10-19
    • 2022-11-03
    • 1970-01-01
    • 1970-01-01
    • 2023-01-27
    • 2021-10-13
    相关资源
    最近更新 更多