Windows 7: федеративный поиск

Опубликовано 11 января 2010 г. 13:32 | Coding4Fun

В этой статье вы узнаете, как использовать федеративный поиск в Windows 7, чтобы легко находить прямо в Windows Explorer элементы из различных общедоступных и закрытых источников.

Автор: Ариан Т. Кулп (Arian T. Kulp)
Исходный код: загрузить
Попробуйте прямо сейчас: возможность отсутствует
Сложность: средняя
Необходимое время: 3 часа
Затраты: бесплатно!
ПО: Visual Studio 2008

Введение

В этой статье создается класс, инкапсулирующий провайдер федеративного поиска (federated search). Он позволяет использовать новый механизм федеративного поиска, введенный в Windows 7. Прочитав статью, вы узнаете:

  • что такое федеративный поиск;
  • как сериализовать класс в XML-объект;
  • как создать пример проекта Silverlight, поддерживающего федеративный поиск.

Что такое федеративный поиск

Windows 7 теперь позволяет вести поиск на веб-сайтах из Windows Explorer (Проводника). Этот механизм особо не рекламировался и на деле недоступен разработчикам (насколько мне известно), но полезен всем.

Федеративный поиск Windows 7 основан на спецификации OpenSearch, разработанной Amazon A9. Сам по себе поиск начинается выдачей простого запроса HTTP GET для искомого слова, указанного в URL (https://example?search=TEST). Ответом являются результаты от веб-сайта в формате RSS или ATOM. Любой сайт, поддерживающий поиск, может возвращать результаты в одном из этих форматов. Приложения вроде SharePoint, Exchange Server и даже Sticky Notes поддерживают эту возможность.

OpenSearch уменьшает полосу пропускания, необходимую для передачи типичного ответа на запрос поиска, и позволяет разработчикам создавать интересные приложения с поддержкой результатов такого поиска. Конечно, одно из применений — возможность отображения результатов непосредственно в Windows Explorer с поддержкой сортировки по столбцам, копирования и вставки, а также использования общего поля поиска. Некоторые нестандартные провайдеры поддерживают даже полную интеграцию с оболочкой Windows, в том числе, например, перетаскивание для копирования сущностей или просмотр дополнительных свойств (вспомните Outlook, SharePoint).

Чтобы добавить в Windows провайдер OpenSearch, нужно предоставить файл определения в формате OSDX. Этот формат позволяет указывать описательную информацию наряду с необходимыми URL и другими параметрами.

Созданиефайловопределения OpenSearch

Цель этого проекта — создавать файлы определения OpenSearch, т. е. файлы OSDX. Эти файлы сопоставляются с Windows Explorer и добавляются в папку Searches: C :\ Users \{ USER }\ Searches.

Данный код не выполняет никакого поиска и не интегрируется с Windows; это не прокси, и он не копается в веб-страницах. Фактически он не делает ничего, кроме создания файлов OSDX для добавления в вашу систему.

Чтобы создать файл OSDX, нужно предоставить URL для вызова и имя провайдера. В минимальном виде этот файл выглядит так:

 <?xml version="1.0" encoding="UTF-8"?>

<OpenSearchDescription xmlns="https://a9.com/-/spec/opensearch/1.1/">

<ShortName>Bing</ShortName>

<Description>Get Relevant Results &amp; Decide Faster. Bing Gets The Job Done!</Description>

<Url type="application/rss+xml" template="https://www.bing.com/search?q={searchTerms}&amp;go=&amp;form=QBLH&amp;qs=n&amp;format=rss"/>

</OpenSearchDescription>

Найдя нужный URL, используйте "{searchTerms}" для замены искомых слов и их сочетаний. Кроме того, есть escape-выражения для начального индекса ("{startIndex}"), счетчик результатов на каждую страницу ("{count}") и др. Заметьте, что Windows Explorer очень привередлив в использовании файла провайдера. Если в синтаксисе XML допущена хоть малейшая неточность (не забывайте о концевых амперсандах в каждой части URL!) или если вы пропустили Atom или RSS URL, он сообщит о неудаче без всякой полезной информации:

clip_image002

Чтобы упростить формирование таких файлов, я создал класс OpenSearchDefinition с соответствующими свойствами. Этот класс и его свойства помечены XML-атрибутами, поэтому его вывод можно записывать как синтаксически правильный XML без конкатенации строк.

Найти сайты, поддерживающие результаты поиска в виде RSS, весьма нелегко, но, к счастью, есть другой способ — поисковая система Bing, результаты которой можно сузить до контента заданного сайта. В этом случае даже удобнее: вы можете запрашивать результаты поиска в RSS. Google тоже предоставляет RSS-результаты поиска, но требует заблаговременной настройки ваших запросов поиска. А Bing позволяет делать это «на лету», просто указывая параметр для любой операции поиска.

Созданиеклиентскогоинтерфейса

Файл класса OpenSearchDefinition делает всю работу, и его можно использовать повторно, но пока у нет широкого применения. Я создал клиентский интерфейс с применением Silverlight для демонстрации одного из вариантов его использования. На серверной стороне размещается веб-форма ASP.NET, которая обрабатывает файл OSDX на основе параметров в URL. Приложение Silverlight просто предоставляет удобный способ ввода этих параметров.

Первая вкладка предназначена для создания провайдера для любого сайта с применением Bing. Помните, что, если вы указываете область поиска с помощью параметра site, Bing будет возвращать результаты только для одного сайта — в сущности, это поиск уровня сайта.

clip_image004

Вторая вкладка позволяет формировать файл OSDX, используя URL поиска RSS любого сайта. Вы можете ввести любое название, описание и URL поиска. Это лучший способ добавления новых провайдеров поиска.

clip_image006

Хотя с помощью Bing можно вести поиск на большинстве сайтов, вы не сможете воспользоваться преимуществами всех средств, предлагаемых каким-либо сайтом.

Заключение

В настоящее время, похоже, лишь немногие владельцы сайтов заинтересованы в поддержке сводных результатов поиска (syndicated search results). Это может быть связано с тем, что в таком варианте может быть не видна реклама. Но, конечно же, если я выполняю поиск и просматриваю результаты, я скорее всего зайду на сайт и в любом случае увижу всю эту рекламу! Так что, если вы владеете популярным сайтом и поддерживаете поиск (остались ли еще сайты без средств поиска?), подумайте о включении ссылки RSS/ATOM рядом с результатами поиска.

Создать определение провайдера поиска в формате OSDX несложно и вручную, но при этом нужно быть очень внимательным, а моя утилита избавляет вас от случайных ошибок и в качестве бонуса демонстрирует применение технологий Silverlight, XML-сериализации и нескольких других модных средств!

Класс OpenSearchDefinition готов для повторного использования. Как и с любым другим кодом из блога Coding 4 Fun, вы можете делать с ним все, что захотите. Если найдете ему новые применения, дайте мне знать!

Скачайте бесплатную редакцию Visual C# 2008 Express Edition, чтобы поиграть с этим кодом, или загрузите веб-сайт ASP.NET и поэкспериментируйте.

Дополнительная информация

Об авторе

Arian Kulp — разработчик ПО, живет в Западном Орегоне. Создает примеры, демо-ролики, лабораторные занятия и пишет статьи, выступает на различных мероприятиях, посвященных вопросам программирования, а также с удовольствием проводит свободное время со своей семьей.