包含/在 Azure 搜索中的数组(预览)

ada*_*aam 6 c# azure azure-cognitive-search

我正在使用新的(预览版)Azure 搜索 SDK(此处的信息)。我正在使用 oData 表达式语法来使用$filter参数构建我的搜索查询,并且我希望能够将一组 id 提供给端点。BrandId 字段位于我的 Azure 搜索索引中,它是可搜索、可过滤、可排序和可分面的。理想情况下,我希望能够按照以下方式做一些事情:

http://host/service/Products?brands=["1","2"]
Run Code Online (Sandbox Code Playgroud)

请参阅此处标题为“复杂和集合文字”部分下的规范

我不知道使用什么语法来在$filter查询中包含集合文字语法。所以我目前只是将逻辑ORs 的负载串连在一起以形成查询,而不是理想的:

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

}
Run Code Online (Sandbox Code Playgroud)

最终的(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
Run Code Online (Sandbox Code Playgroud)

希望有人能启发我吗?

Bru*_*ton 6

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

以下是您将如何search.in用于此特定情况的示例:

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