使用空格时,Azure Search的search.in不会返回结果

时间:2018-01-09 07:48:36

标签: c# azure search azure-search

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

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

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显示可以使用空格,所以我想知道为什么我在使用空格时没有得到任何结果。

$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无法搜索有关,但另一方面,它适用于非空间类别。此外,如果它像eg那样,那么它是一个过滤器而不是一个搜索,对吧..?

有人可以解释这个区别吗?

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

1 个答案:

答案 0 :(得分:5)

问题在于,如果您没有指定分隔符,search.in会假定空格和逗号是分隔符。由于您的值中包含空格,因此您需要指定自己的分隔符参数。例如,假设您的值不包含逗号,则可以执行以下操作:

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

请注意Garden之后的逗号后面没有空格。

一般情况下,如果字面值中包含这些字符,则无法使用字符作为分隔符。

您在我们的文档中提到的示例不正确。我们确保它得到修复。对不起,感到困惑。