2011-05-07 134 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編碼加號,這是兵怎麼問你連接多個過濾器。但同樣,你不能指定兩個相同類型的圖像過濾器,如兩個尺寸過濾器或兩個樣式過濾器。

有兩種解決方法,我都不喜歡。首先是提出兩個請求,可能並行,每個請求大小一個,然後加入結果。但是,如何在沒有某種分數的情況下按照相關性加入和排序兩個單獨的列表?

更簡單的方法是完全跳過篩選,並請求比您需要的更多結果。然後按照您自己的尺寸要求過濾結果。如果你不分頁,這可能是最好的選擇。