【问题标题】:ACS: search.in doesn't support special characters in odata filters syntaxACS:search.in 不支持 odata 过滤器语法中的特殊字符
【发布时间】:2021-08-18 09:57:47
【问题描述】:

特殊字符不适用于 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'

【问题讨论】:

    标签: filter odata azure-cognitive-search acs azure-search-.net-sdk


    【解决方案1】:

    请尝试更改:

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

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

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

    考虑到管道字符在您的搜索值中没有位置,您的类别字段将搜索Books & reference,而在第一种情况下,将在类别字段中搜索Book&reference 值.

    这是documentation 对分隔符的评价(强调我的):

    解析时将每个字符视为分隔符的字符串 值列表参数。此参数的默认值为 ' ,' 这意味着它们之间有空格和/或逗号的任何值 将分开。如果您需要使用空格以外的分隔符和 逗号,因为您的值包含这些字符,您可以指定 备用分隔符,例如“|”在这个参数中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-26
      相关资源
      最近更新 更多