使用空格时,Azure 搜索的 search.in 没有 return 结果

Azure Search's search.in doesn't return results when using spaces

我正在从我的 c# 应用程序调用 Azure 搜索。

当我尝试过滤我的产品类别时,它只会在类别不包含任何 space 时给我结果。

search.in(ProductCategory,'Garden')  // Works
search.in(ProductCategory,'Sport and Games')  // Doesn't Work
search.in(ProductCategory,'Garden, Sport and Games')  // Only shows 'Garden' results

documentation 显示可以使用 spaces 所以我想知道为什么我在使用 spaces 时没有得到任何结果。

$filter=search.in(name, 'Roach motel, Budget hotel') // Sample from docs

它还指出 search.in(field, 'one,two,three') 等于 field eq 'one' or field eq 'two' or field eq 'three'。但是当我在我的案例中使用它时,所以 ProductCategory eq 'Sport and Games' 它起作用了。

所以我认为它们之间存在某种差异。但我不知道它是什么。我首先认为它可能与字段 ProductCategory 不可搜索有关,但另一方面,它适用于非 space 类别。另外,如果它的行为像 eg 那么它是一个过滤器而不是搜索,对吧..?

谁能解释一下区别?


现在我只创建没有搜索的过滤器,只有 ProductCategory eq 'Sport and Games or ...' 但是当有人选择很多类别时,这可能会变得很长。

问题是,如果您不指定分隔符,search.in 会假定 space 和逗号是分隔符。由于您的值中包含 space,因此您需要指定自己的分隔符参数。例如,假设您的值不包含逗号,您可以这样做:

$filter=search.in(ProductCategory, 'Garden,Sport and Games', ',')

请注意,Garden 后面的逗号后缺少 space。

一般情况下,如果这些字符出现在文字值中,则您不能将这些字符用作分隔符。

您从我们的文档中提到的示例不正确。我们会确保它得到修复。抱歉造成混淆。