微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c# – Azure搜索中的包含/数组(预览)

我正在使用新的(预览)Azure搜索SDK(information here).我正在使用oData表达式语法使用$filter参数构建我的搜索查询,并且我希望能够将一组id引用到端点. brandId字段位于我的Azure搜索索引中,可搜索,可过滤,可排序和可分页.理想情况下,我希望能够做到以下几点:

http://host/service/Products?brands=["1","2"]

(See specification here题为“复杂和收集文字”一节)

我无法弄清楚用什么语法来包含$filter查询中的集合文字语法.所以我现在只是将大量逻辑OR连接在一起形成查询,而不是理想的:

var sp = new SearchParameters();

string filter = "$filter=";

if(brands.Length > 0)
{   
    int counter = 0;

    foreach(string brand in brands)
    {
        if(counter == 0)
        {
            filter += "(brandId eq '" + brand + "'";
        }   
        else if(counter == (brands.Count() - 1))
        {
            filter += " or brandId eq '" + brand + "')";
        }
        else
        {
            filter += " or brandId eq '" + brand + "'";
        }
        counter++;
    }
}

sp.Filter = filter;

DocumentSearchResult response = indexClient.Documents.Search(theSearchQuery, sp);

foreach(SearchResult result in response.Results)
{
    // do stuff to the results

}

最终的(url编码的)URI如下:

https://[mysearchservicename].search.windows.net/indexes/products/docs?api-version=2015-02-28&$filter=language%20eq%20%27us%27%20and%20%28brandId%20eq%20%276%27%20or%20brandId%20eq%20%278%27%20or%20brandId%20eq%20%279%27%20or%20brandId%20eq%20%2710%27%20or%20brandId%20eq%20%2711%27%20or%20brandId%20eq%20%2713%27%20or%20brandId%20eq%20%2722%27%29

希望有人能开导我吗?

解决方法:

Azure搜索不支持集合文字或参数化过滤器,但它确实为这种情况提供了专门的功能:search.in. Azure Search支持的OData子集以及search.in函数记录在here中.

以下是如何使用search.in来解决此特定情况的示例:

$filter = search.in(brandId,’1,2′)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐