【问题标题】:Literal Ampersands in Azure Search Query StringAzure 搜索查询字符串中的文字 & 符号
【发布时间】:2019-07-16 16:42:40
【问题描述】:

我正在尝试对 Azure 搜索中的分面搜索应用筛选器。不幸的是,我的一些客户的搜索数据包含这样的 & 字符:

&facet=client&$filter=client eq 'Dunn & Bradstreet'

由于上述示例是查询字符串的一部分,Dunn & Bradstreet 中的 & 符号是个问题。

如下转义&符号会导致错误:

&facet=client&$filter=client eq 'Dunn %26 Bradstreet'

使用 Azure 搜索资源管理器测试搜索查询时的错误是:

{
    "error": {
        "code": "",
        "message": "Invalid expression: There is an unterminated string literal at position 34 in 'client eq 'Dunn '.\r\nParameter name: $filter"
    }
}

是否有一些神奇的解决方法可以在不会破坏 Azure 搜索的字符串中转义 & 符号?

【问题讨论】:

  • Apparently 转义字符是`\`。
  • @500-InternalServerError 这是针对 Lucene 语法的。问题是关于 OData 过滤器语法。
  • @PoorInRichfield 您发现了什么错误?您如何发送请求——.NET SDK、Azure 门户中的搜索资源管理器、直接调用 REST API...?请编辑您的问题以提供更多详细信息。谢谢!
  • @Bruce Johnston 我更新了问题以反映错误消息。在 & 符号前加一个“\”并不能解决问题。我想我可以在将数据加载到搜索索引中时对数据进行 HTML 编码,因此数据中不存在与号,但这并不理想。
  • 您在搜索字符串中尝试过&

标签: c# query-string urlencode azure-cognitive-search


【解决方案1】:

这似乎是搜索资源管理器中的一个错误。它对 URL 中的字符进行编码,而不是 & 符号。如果您对 & 符号本身进行编码,搜索资源管理器会对其进行双重编码。我已经确认,如果您在直接调用 REST API 时对 & 符号进行编码,它可以正常工作。

修复错误后,我将更新此答案。很抱歉给您带来不便。

更新:我们修复了搜索资源管理器中的问题

【讨论】:

  • 感谢您对此进行调查。我已经验证了 REST API 在将 & 符号编码为 %26 时有效。 (我发誓这昨天没用,但今天似乎有效!)
  • 该问题已在搜索资源管理器中修复
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-04-18
  • 1970-01-01
  • 1970-01-01
  • 2012-02-26
  • 1970-01-01
  • 2021-07-10
  • 2021-03-26
相关资源
最近更新 更多