Azure 搜索查询在包含撇号时会导致错误响应 400
Azure Search Query causes a bad response 400 when it contains an apostrophe
我有两个用于通过 Azure 搜索进行筛选的 Facet:Revit's 2014 和 Revit 2016 但两者在查询。
通过 "Revit's" 的查询时出现错误 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);
None 正在工作。
解决方法很简单,只需在一个撇号后面加上一个撇号即可将其转义。因此,在我的示例中,将字符串从 "Revit's" 更改为 "Revit''s" 就可以了。
RFC 3986 编码技术不对包括撇号在内的某些字符进行编码。
我有两个用于通过 Azure 搜索进行筛选的 Facet:Revit's 2014 和 Revit 2016 但两者在查询。
通过 "Revit's" 的查询时出现错误 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);
None 正在工作。
解决方法很简单,只需在一个撇号后面加上一个撇号即可将其转义。因此,在我的示例中,将字符串从 "Revit's" 更改为 "Revit''s" 就可以了。 RFC 3986 编码技术不对包括撇号在内的某些字符进行编码。