gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-30 01:33:02 33 4
gpt4 key购买 nike

我正在使用新的(预览版)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 搜索支持的 OData 子集以及 search.in 函数已记录在 here 中。 .

以下示例展示了如何针对此特定情况使用 search.in:

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

关于c# - Azure 搜索中的包含/数组(预览版),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35153803/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com