2011-05-07 124 views
3

我正在使用Bing Sharp 2.0。我想通过做过滤图片搜索,所以我按照代码样本:Bing API图像搜索筛选器

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(); 
} 

但结果回来什么(response.Total == 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 

难道我做错了什么?如何将多个过滤器放入搜索请求中?

+0

我想在iOS应用程序中集成相同的API。可以指导我在哪里注册我的应用程序? – Murali 2013-11-15 05:42:19

回答

1

这实际上是一个相当简单的解决...

你会在你的第二个“Image.Filters =尺寸:中& Image.Filters =大小:小”看到图像过滤器比特被重复。将其更改为:

“Image.Filters =尺寸:中&大小:小”

甚至:

“Image.Filters =尺寸:中&小”

和回报都结果。

+1

添加多个过滤器的正确方法是“Image.filters = Size:Medium&Image.filters = Face:Face”。大小上的过滤器:中和大小:大不重叠,并将导致空集 – Sid 2011-10-04 21:33:51

0

由于@Sid在评论中提到,您不能使用两种尺寸的过滤器。

这些是AND过滤器,这意味着您应用的每一个都使搜索更严格和更严格。 Bing会将您的请求视为想要的“小”和“中”图像。当然,没有图像会符合这两个标准,所以你会得到一个空的结果集。

@gloscherrybomb认为他们的答案是有效的,因为bing完全忽略了“Size:Small”的最后一个参数或者更简单的“Small”,并且它只提供中等结果。为什么?因为它正确读取Image.Filters参数为“大小:中”,然后其余文本只是垃圾。 API文档明确说明过滤器必须有一个加号,网址编码,被连接,像这样:

Image.Filters=Size:Medium%2BStyle:Photo 

的“%2B”以上是URL编码加号,这是兵怎么问你连接多个过滤器。但同样,你不能指定两个相同类型的图像过滤器,如两个尺寸过滤器或两个样式过滤器。

有两种解决方法,我都不喜欢。首先是提出两个请求,可能并行,每个请求大小一个,然后加入结果。但是,如何在没有某种分数的情况下按照相关性加入和排序两个单独的列表?

更简单的方法是完全跳过筛选,并请求比您需要的更多结果。然后按照您自己的尺寸要求过滤结果。如果你不分页,这可能是最好的选择。