【发布时间】:2020-05-20 19:49:09
【问题描述】:
我们正在使用 Azure 认知搜索 .NET SDK,并尝试通过一个字符串字段来查找 $filter,该字符串字段可以包含搜索特殊字符(例如 &)以及单引号。
当过滤带有特殊字符的厨房水槽的测试用例时,我们得到零结果(我们排除了 | 因为它是 search.in 的分隔符):
{
"FirmName": "Crazy Charz Inc. ' + - && ! ( ) { } [ ] ^ \" ~ * ? : \\ /"
...
}
当我们将\ 的特殊字符转义为asked about here 和recommended here,并通过双引号'' 将单引号转义(如in this answer 所示,不在SDK 文档中),我们得到零结果。
Filter in our SearchParameters object 设置为:
search.in(FirmName, 'Crazy Charz Inc. '' \+ \- \&\& \! \( \) \{ \} \[ \] \^ \" \~ \* \? \: \\ \/', '|')
(这就是在 VS 中检查变量时的样子;它应该被正确转义。)
我们得到零结果。
我们已经确认它是特定于特殊字符的,因为我们有大量测试使用相同的字段来匹配其他值中不包含此类字符的文档。
出于好奇,我们尝试像这样在搜索资源管理器中运行它:
$filter=search.in(FirmName, 'Crazy Charz Inc. '' \+ \- \&\& \! \( \) \{ \} \[ \] \^ \" \~ \* \? \: \\ \/', '|')
当我们这样做时,我们会得到错误:
"Invalid expression: Found an unbalanced bracket expression.\r\nParameter name: $filter"
我们已经确认 SDK 返回的是实际的零结果响应,而不是错误(我们在过滤器表达式中放置了一个实际的不平衡表达式来确认这一点)。
我们如何使用 .NET SDK $filter 处理带有特殊字符的值?这是一个错误,还是我们做错了什么?
注意:我们提供了一个选择列表并进行完全匹配;因此过滤而不是搜索这个用例。我们稍后会在其他字段上添加搜索。
我们需要简单地对所有字段进行 URLEncode 吗?呃……
【问题讨论】:
-
发布了一个 SDK 错误 here,因为似乎没有人有答案。
-
抱歉回复延迟,感谢您在 GitHub 上提交问题。我已将其分配给自己,并将进行调查。
标签: c# azure-cognitive-search azure-search-.net-sdk