ACS:search.in 不支持 odata 过滤器语法中的特殊字符

ACS: search.in doesn't support special characters in odata filters syntax

特殊字符不能与 ACS 中的 search.in 运算符一起使用,例如,这不会从 ACS 中获取任何值 search.in(category, 'Books & reference')。 我也试过如下编码特殊字符,但还是不行。

search.in(category, 'Books%20%26%20reference')
search.in(category, 'Books %26 reference')
search.in(category, 'Books+%26+reference')
search.in(category, 'Books & reference')

唯一有效的方法是使用 eq 运算符,如下所示

category eq 'Books & reference'

但是根据 ACS 文档,seach.in 在有多个属性值要过滤时性能更高,也更方便

search.in(category, 'Movies,Education,Tools')

比使用eq运算符更方便如下

category eq 'Books' OR category eq 'Education' OR category eq 'Tools'

请尝试更改:

search.in(category, 'Books & reference')

search.in(category, 'Books & reference', '|')

本质上,在第一个中,space 被视为分隔符。在第二个中,您明确告诉您使用 pipe (|) 作为分隔符。

考虑到管道字符在您的搜索值中不存在,您的类别字段将搜索 Books & reference 而在第一种情况下,将搜索 Book&、和类别字段中的 reference 个值。

这就是 documentation 对分隔符的说法(强调 我的):

A string where each character is treated as a separator when parsing the valueList parameter. The default value of this parameter is ' ,' which means that any values with spaces and/or commas between them will be separated. If you need to use separators other than spaces and commas because your values include those characters, you can specify alternate delimiters such as '|' in this parameter.