【问题标题】:Azure Search Query causes a bad response 400 when it contains an apostropheAzure 搜索查询在包含撇号时会导致错误响应 400
【发布时间】:2018-12-30 23:19:39
【问题描述】:

我有两个 Facet 用于通过 Azure 搜索进行过滤:Revit's 2014Revit 2016,但两者在查询中的行为不同。

传递带有“Revit”的查询时出现错误 400(错误请求):

(search.in(Application, '7946ca7e-78d0-441a-b939-711cae340dc0||Revit\'s||2014', '<^>'))

但是包含“Revit”(无撇号)的查询可以正常工作:

(search.in(Application, 'c691dc7f-1c08-4a1c-bc4b-db62b214a0b3||Revit||2016', '<^>'))

Azure 搜索文档指出,危险或保留字符需要通过在它们之前添加一个“\”来进行转义,我正在这样做,但错误仍在发生。

错误信息是:

"Invalid expression: ')' or ',' expected at position 125 in 'ContextId eq '72adad30-c07c-465d-a1fe-2f2dfac950a4' and (search.in(Application, 'c691dc7f-1c08-4a1c-bc4b-db62b214a0b3||Revit's||2014', '<^>'))'.\r\nParameter name: $filter"

我尝试过使用 %27 替换 ' 或使用以下解决方案:

name = name.replace(/'/g, escape);

没有一个在工作。

【问题讨论】:

    标签: javascript azure typescript azure-cognitive-search faceted-search


    【解决方案1】:

    解决方案很简单,只需在撇号后面加上另一个撇号即可将其转义。因此,在我的示例中,将字符串从“Revit's”更改为“Revit's”就可以了。 RFC 3986 编码技术不编码某些字符,包括撇号。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-21
      • 1970-01-01
      • 2023-03-10
      相关资源
      最近更新 更多