3

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

しかし、結果は何も返されません(response.Total == 0)。

その理由は、buildFilterArray()で2つのフィルターを指定したためです。1つを削除する限り(どちらを削除しても)、検索結果は期待どおりに返されます。

これは、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

私は何か間違ったことをしていますか?検索リクエストに複数のフィルターを含めるにはどうすればよいですか?

4

2 に答える 2

1

これは実際には非常に簡単な修正です...

2番目の画像には、「Image.Filters = Size:Medium&Image.Filters = Size:Small」という画像フィルタービットが繰り返されていることがわかります。次のように変更します。

"Image.Filters = Size:Medium&Size:Small"

あるいは:

"Image.Filters = Size:Medium&Small"

そして両方とも結果を返します。

于 2011-08-07T18:35:49.263 に答える
0

@Sidがコメントで述べたように、2つのサイズのフィルターを使用することはできません。

これらはANDフィルターです。つまり、適用するフィルターごとに検索がますます厳密になります。Bingは、「小」と「中」の両方の画像が必要であると要求を読み取ります。もちろん、両方の基準を満たす画像はないため、空の結果セットが得られます。

@gloscherrybombは、Bingが「Size:Small」またはさらに単純な「Small」の最後のパラメーターを単に無視し、中程度の結果しか提供しないため、回答が機能すると考えています。なんで?これは、Image.Filtersパラメーターを「Size:Medium」として正しく読み取り、残りのテキストがジャンクであるためです。APIドキュメントには、次のように、フィルタをURLエンコードされたプラス記号で結合する必要があることが明記されています。

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

上記の「%2B」は、URLエンコードされたプラス記号です。これは、Bingが複数のフィルターを連結するように要求する方法です。ただし、2つのサイズフィルターや2つのスタイルフィルターなど、同じタイプの画像フィルターを2つ指定することはできません。

2つの回避策がありますが、どちらも好きではありません。1つ目は、必要なサイズごとに1つずつ、場合によっては並行して2つの要求を行い、結果を結合することです。しかし、ある種のスコアなしで、どのように2つの別々のリストを結合し、関連性によってソートしますか?

より簡単な方法は、フィルタリングを完全にスキップして、必要以上の結果を要求することです。次に、独自のサイズ要件で結果をフィルタリングします。ページ付けを行っていない場合は、これがおそらく最良のオプションです。

于 2014-02-26T22:13:25.337 に答える