当Azure搜索查询包含撇号时,它会导致错误的响应400

Div*_*nSi 5 javascript azure faceted-search typescript azure-cognitive-search

我有两个要用于通过Azure搜索进行筛选的方面:Revit 2014Revit 2016,但是在查询中的行为不同。

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

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

但是,包含“ Revit”(无撇号)的查询工作得很好:

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

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"
Run Code Online (Sandbox Code Playgroud)

我已经尝试过将%替换为%27或使用以下解决方案:

name = name.replace(/'/g, escape);
Run Code Online (Sandbox Code Playgroud)

没有任何工作。

Div*_*nSi 0

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