Фильтр поиска изображений API Bing - PullRequest
3 голосов
/ 07 мая 2011

Я использую 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();
}

Но результат ничего не возвращает (response.Total == 0).

Я обнаружил, что причина в том, что я указал 2 фильтра в buildFilterArray (), пока я удаляю один (независимо от того, какой), мой поиск возвращается с ожидаемыми результатами.

Это также подтверждается отправкой http get-запроса напрямую из IE. Возвращает результаты:

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

Я что-то не так делаю? Как я могу добавить более одного фильтра в поисковый запрос?

Ответы [ 2 ]

1 голос
/ 07 августа 2011

Это довольно простое исправление ...

Вы увидите во втором "Image.Filters = Size: Medium & Image.Filters = Size: Small", что бит фильтров изображения повторяется. Измените его на:

"Image.Filters = Размер: Medium & Размер: Маленький"

или даже:

"Image.Filters = Размер: Средний и Малый"

и оба возвращают результаты.

0 голосов
/ 27 февраля 2014

Как уже упоминалось в комментарии @Sid, нельзя использовать фильтры двух размеров.

Это фильтры AND, то есть каждый применяемый вами фильтр делает поиск все строже и строже. Bing считывает ваш запрос как изображения, которые являются «маленькими» и «средними». Конечно, ни одно изображение не будет соответствовать обоим критериям, поэтому вы получите пустой набор результатов.

@ gloscherrybomb считает, что их ответ работает, потому что bing просто игнорирует последний параметр «Size: Small» или даже более простой «Small» и дает только средние результаты. Зачем? потому что он правильно читает параметр Image.Filters как «Размер: Средний», а затем остальная часть текста просто мусор. В документах API четко указано, что фильтры должны быть соединены со знаком плюс в кодировке URL, например:

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

"% 2B" выше - это символ плюса, закодированный в URL-адресе, и поэтому Bing просит вас объединить несколько фильтров. Но опять же, вы не можете указать два фильтра изображений одного типа, например два фильтра размера или два фильтра стиля.

Есть два обходных пути, ни один из которых мне не нравится. Первый - сделать два запроса, возможно, параллельно, по одному для каждого размера, который вы хотите, а затем объединить результаты. Но как вы объединяете и сортируете два отдельных списка по релевантности без какой-либо оценки?

Самый простой способ - вообще пропустить фильтрацию и запросить больше результатов, чем вам нужно. Затем отфильтруйте результаты по вашим собственным требованиям к размеру. Если вы не разбираетесь в страницах, это, вероятно, лучший вариант.

...