【问题标题】:Azuresearch search.in functionallity not working as expectedAzure 搜索 search.in 功能未按预期工作
【发布时间】:2019-03-30 12:55:36
【问题描述】:

试图找出以下过滤器返回不同结果的原因。

根据docs,我应该能够将and or 条件与search in 函数一起使用

search.in(f, ‘a, b, c’) 在语义上等价于 f eq ‘a’ 或 f eq ‘b’ 或 f eq ‘c’,除了当列表 值很大。

但以下过滤器返回不同的结果。但为什么呢?

   // Returns nothing
   $count=true&$filter=companyGroupId eq 1595 and search.in(companyName, 'Sky Blue, Green Ice')

但如果我这样做

   // Returns expected results
    $count=true&$filter=companyGroupId eq 1595 and (companyName eq 'Sky Blue' or companyName eq 'Green Ice')

为什么结果对我来说如此不同,似乎它们应该是一样的。

我的 CompanyName 属性如下所示

[IsFilterable]
[IsSortable]
[IsFacetable]
public string CompanyName { get; set; }

【问题讨论】:

    标签: odata azure-cognitive-search


    【解决方案1】:

    它们是不同的,因为search.in 解析第二个参数的方式。由于您的值中有空格,因此您需要将自己的分隔符指定为search.in 的第三个参数。默认行为是以空格和逗号分隔。试试这个:

    search.in(companyName, 'Sky Blue|Green Ice', '|')

    您可以找到其他使用 search.in here 的示例。

    【讨论】:

    • 确实如此,但 search.in 不应该处理括号吗? search.in 过滤器应该如何看待。 $count=true&$filter=companyGroupId eq 1595 and (search.in(companyName, 'Sky Blue, Green Ice')) ?因为那也行不通
    • 我在第二个过滤器周围添加了括号。但就像我在上面的评论中提到的那样,search.in 结果没有返回任何东西,对我来说,这两个查询应该是相同的结果。
    • @R4nc1d 括号不能解决问题,因为我错过了第二个问题。我已经更新了我的答案以反映这一点。如果有帮助,请告诉我。
    猜你喜欢
    • 2018-10-17
    • 2013-08-29
    • 2020-04-28
    • 2021-08-27
    • 1970-01-01
    • 1970-01-01
    • 2013-06-02
    • 2017-05-12
    • 1970-01-01
    相关资源
    最近更新 更多