必应 API 图像搜索筛选器
本文关键字:筛选 搜索 图像 API 必应 | 更新日期: 2023-09-27 17:55:08
我正在使用Bing Sharp 2.0。我想通过过滤器进行图像搜索,所以我遵循示例中的代码:
SearchRequest searchRequest = new SearchRequest { AppId = appId, Query = query, Market = "en-US" };
ImageRequest imageRequest = new ImageRequest();
imageRequest.Filters = buildFilterArray();
imageRequest.Count = imageCount;
imageRequest.Offset = (imageCount * pageNumber);
ImageResponse response = API.Image(searchRequest, imageRequest);
这是buildFilterArray:
private string[] BuildFilterArray()
{
List<string> filters = new List<string>();
filters.Add("Size:Small");
filters.Add("Size:Medium");
return filters.ToArray();
}
但结果一无所获(响应。总计 == 0)。
我发现原因是因为我在 buildFilterArray() 中指定了 2 个过滤器,只要我删除一个(无论是哪一个),我的搜索就会返回预期的结果。
这也通过直接从IE发出http get请求来证明,这返回结果:
http://api.search.live.net/xml.aspx?AppId=0B409D9BA6759BCD3CC3D8B9A6A90F2907274BC7&Query=tektronix&Version=2.0&Market=en-US&Sources=Image&Image.Count=10&Image.Offset=0&Image.Filters=Size:Small
虽然这不是:
http://api.search.live.net/xml.aspx?AppId=0B409D9BA6759BCD3CC3D8B9A6A90F2907274BC7&Query=tektronix&Version=2.0&Market=en-US&Sources=Image&Image.Count=10&Image.Offset=0&Image.Filters=Size:Medium&Image.Filters=Size:Small
我做错了什么吗?如何在搜索请求中放入多个筛选器?
这实际上是一个非常简单的修复...
您将在第二个"Image.Filters=Size:Medium&Image.Filters=Size:Small"中看到图像过滤器位被重复。将其更改为:
"图像.过滤器=大小:中&大小:小"
甚至:
"图像.过滤器=大小:中小"
并且两者都返回结果。
正如@Sid评论中提到的,您不能使用两个大小的过滤器。
这些是 AND 过滤器,这意味着您应用的每个过滤器都会使搜索越来越严格。必应将请求读取为需要"小"和"中"的图像。当然,没有图像会同时满足这两个条件,因此您将获得一个空的结果集。
@gloscherrybomb认为他们的答案有效,因为必应只是忽略了"大小:小"的最后一个参数或更简单的"小",并且它只提供中等结果。为什么?因为它正确地将 Image.Filters 参数读取为"大小:中等",然后文本的其余部分只是垃圾。API 文档明确指出,过滤器必须使用加号、url 编码连接,如下所示:
Image.Filters=Size:Medium%2BStyle:Photo
上面的"%2B"是 url 编码的加号,这是必应要求你连接多个筛选器的方式。但同样,您不能指定两个相同类型的图像滤镜,例如两个大小滤镜或两个样式滤镜。
有两种解决方法,我都不喜欢。第一种是发出两个请求,可能并行,每个大小对应一个请求,然后加入结果。但是,如何在没有某种分数的情况下按相关性连接和排序两个单独的列表?
更简单的方法是完全跳过过滤,并请求比您需要的更多的结果。然后按您自己的大小要求筛选结果。如果您不分页,这可能是最佳选择。