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 & Decide Faster. Bing Gets The Job Done!</Description>
<Url type="application/rss+xml" template="https://www.bing.com/search?q={searchTerms}&go=&form=QBLH&qs=n&format=rss"/>
</OpenSearchDescription>
Найдя нужный URL, используйте "{searchTerms}" для замены искомых слов и их сочетаний. Кроме того, есть escape-выражения для начального индекса ("{startIndex}"), счетчик результатов на каждую страницу ("{count}") и др. Заметьте, что Windows Explorer очень привередлив в использовании файла провайдера. Если в синтаксисе XML допущена хоть малейшая неточность (не забывайте о концевых амперсандах в каждой части URL!) или если вы пропустили Atom или RSS URL, он сообщит о неудаче без всякой полезной информации:
Чтобы упростить формирование таких файлов, я создал класс OpenSearchDefinition с соответствующими свойствами. Этот класс и его свойства помечены XML-атрибутами, поэтому его вывод можно записывать как синтаксически правильный XML без конкатенации строк.
Найти сайты, поддерживающие результаты поиска в виде RSS, весьма нелегко, но, к счастью, есть другой способ — поисковая система Bing, результаты которой можно сузить до контента заданного сайта. В этом случае даже удобнее: вы можете запрашивать результаты поиска в RSS. Google тоже предоставляет RSS-результаты поиска, но требует заблаговременной настройки ваших запросов поиска. А Bing позволяет делать это «на лету», просто указывая параметр для любой операции поиска.
Созданиеклиентскогоинтерфейса
Файл класса OpenSearchDefinition делает всю работу, и его можно использовать повторно, но пока у нет широкого применения. Я создал клиентский интерфейс с применением Silverlight для демонстрации одного из вариантов его использования. На серверной стороне размещается веб-форма ASP.NET, которая обрабатывает файл OSDX на основе параметров в URL. Приложение Silverlight просто предоставляет удобный способ ввода этих параметров.
Первая вкладка предназначена для создания провайдера для любого сайта с применением Bing. Помните, что, если вы указываете область поиска с помощью параметра site, Bing будет возвращать результаты только для одного сайта — в сущности, это поиск уровня сайта.
Вторая вкладка позволяет формировать файл OSDX, используя URL поиска RSS любого сайта. Вы можете ввести любое название, описание и URL поиска. Это лучший способ добавления новых провайдеров поиска.
Хотя с помощью Bing можно вести поиск на большинстве сайтов, вы не сможете воспользоваться преимуществами всех средств, предлагаемых каким-либо сайтом.
Заключение
В настоящее время, похоже, лишь немногие владельцы сайтов заинтересованы в поддержке сводных результатов поиска (syndicated search results). Это может быть связано с тем, что в таком варианте может быть не видна реклама. Но, конечно же, если я выполняю поиск и просматриваю результаты, я скорее всего зайду на сайт и в любом случае увижу всю эту рекламу! Так что, если вы владеете популярным сайтом и поддерживаете поиск (остались ли еще сайты без средств поиска?), подумайте о включении ссылки RSS/ATOM рядом с результатами поиска.
Создать определение провайдера поиска в формате OSDX несложно и вручную, но при этом нужно быть очень внимательным, а моя утилита избавляет вас от случайных ошибок и в качестве бонуса демонстрирует применение технологий Silverlight, XML-сериализации и нескольких других модных средств!
Класс OpenSearchDefinition готов для повторного использования. Как и с любым другим кодом из блога Coding 4 Fun, вы можете делать с ним все, что захотите. Если найдете ему новые применения, дайте мне знать!
Скачайте бесплатную редакцию Visual C# 2008 Express Edition, чтобы поиграть с этим кодом, или загрузите веб-сайт ASP.NET и поэкспериментируйте.
Дополнительная информация
- https://www.neowin.net/news/main/09/01/06/windows-7-federated-search
- https://www.msdev.com/Directory/Description.aspx?EventId=1199
- https://www.sevenforums.com/tutorials/742-windows-7-search-federation-providers.html
Об авторе
Arian Kulp — разработчик ПО, живет в Западном Орегоне. Создает примеры, демо-ролики, лабораторные занятия и пишет статьи, выступает на различных мероприятиях, посвященных вопросам программирования, а также с удовольствием проводит свободное время со своей семьей.