使用 OpenSearch 进行 PHP 的 Windows 联合搜索





5.00/5 (3投票s)
如何构建一个 OpenSearch 数据源,该数据源可以通过 Windows 7 联合搜索功能进行搜索。遵循最佳实践,您可以实现您的远程数据源与 Windows 7 Explorer 的丰富集成,而无需编写任何客户端代码。
引言
Windows 7 通过使用 OpenSearch 技术,引入了对远程数据存储的搜索联合支持,使用户能够从 Windows Explorer 内部访问和交互他们的远程数据。
本文档介绍了如何构建一个可以通过 Windows 联合搜索进行搜索的基于 Web 的数据源。遵循此处描述的最佳实践,您可以实现您的远程数据源与 Windows Explorer 的丰富集成,而无需编写或部署任何 Windows 客户端代码。
搜索引擎自动发现
自动发现是一种自动查找与特定网页关联的机器可处理资源的方法。由于资源以明确定义的方式链接,因此发现过程可以自动化。
在我最初撰写本文时,所有主流浏览器(IE8、Chrome 和 Firefox)都公开支持对符合 OpenSearch 的终结点进行搜索引擎自动发现。然而,从那时起,只有 Firefox 仍然轻松地提供了添加 OpenSearch 提供程序的功能;使用 Chrome,您必须通过其“设置/管理搜索”进行操作,而 IE9 则完全放弃了此功能。
以下是一些关于为搜索引擎自动发现设置特定浏览器的精彩文章:
- http://martin-thoma.com/search-engine-autodiscovery
- http://www.knallisworld.de/blog/2011/04/14/autodiscovery-der-searchengine-in-google-chrome-opensearch/
为了获得最佳的 OpenSearch 体验,请选择 Firefox,因为它提供了最便捷的方式将 OpenSearch 引擎添加到您的浏览器。
部署示例
http://www.jeff00seattle.com/projects/WindowsFederatedSearch4PHP/
什么是 Windows 联合搜索?
Windows 联合搜索使用户能够从 Windows Explorer 内部搜索远程数据源。远程数据源通过一个简单的 Web 前端使其可搜索,该前端公开其搜索功能。
将您的数据源与 Windows Explorer 集成的优势在于,用户可以使用已经熟悉的 Windows Explorer 用户界面来访问他们的所有信息。您的用户将能够像查看本地文件一样查看您的远程数据源中的文件,并带有正确的应用程序图标和上下文菜单。
此处 Microsoft 网站上提供了完整解释:Windows 中的联合搜索
Windows 联合搜索示例设置
OpenSearch 示例演示了基于 PHP 的网站如何通过 OpenSearch 终结点公开其搜索功能,并可以选择在 Windows Explorer 中提供搜索过滤器来搜索该网站。为了简单起见,在此示例中,PHP 网站上的 OpenSearch 终结点仅使用 Yahoo 股票行情服务来获取结果。在实际应用场景中,搜索终结点很可能会调用网站的内部搜索功能。
正如以下图所示,有五个简单的步骤可以让 Windows 7 Explorer 的联合搜索功能访问 Windows 联合搜索 Web 服务终结点演示:
- 将 Windows Federated Search Demo Endpoint 文件夹 **WindowsFederatedSearch4PHP** 安装到 Web 服务中。
- 对于需要访问防火墙之外信息的数据源,可能需要在 **WindowsFederatedSearch_UserConfig.class.php** 中修改代理设置。
- 在浏览器中测试 Windows Federated Search Endpoint 的 RSS feed。
- 修改 Windows Federated Search 描述文档 **WindowsFederatedSearch4PHP.osdx** 中的 URL 路径。
- 部署 OSD 文档 **WindowsFederatedSearch4PHP.osdx**,在客户端的 **Windows 7 Explorer** 中创建一个 **搜索连接器**。
步骤 1 - 创建 Windows 联合搜索 Web 服务终结点 - 安装演示文件夹
将 **WindowsFederatedSearch4PHP** 文件夹及其所有内容放置到您的网站中。
默认情况下,已将所有必需的配置放置在 **WindowsFederatedSearch4PHP** 文件夹中,使其能够运行,位于 localhost 的根目录,端口 80,且无需代理即可访问防火墙外部;换句话说,从浏览器可以通过以下 URL 地址访问 Windows 联合搜索终结点:
https:///WindowsFederatedSearch4PHP/
步骤 2 - 修改 Windows 联合搜索 Web 服务终结点的 cURL 代理设置
**WindowsFederatedSearch_DataSource.class.php** 是此 Windows 联合搜索 Web 服务终结点示例所使用的数据源。此数据源使用 PHP cURL 连接到外部股票行情提供商 Yahoo Stock。
如果通过防火墙建立 Internet 连接需要代理,则可能需要在 PHP 文件 **WindowsFederatedSearch_UserConfig.class.php** 中修改代理信息。
如果访问站点不需要代理,则可以跳过此步骤。
PHP – WindowsFederatedSearch_UserConfig.class.php
修改 WindowsFederatedSearch_DataSource Endpoint 的搜索名称和服务器设置
class UserConfigConstants
{
const OPEN_SEARCH_SHORT_NAME = 'Windows Federated Search 4 PHP';
const OPEN_SEARCH_DESCRIPTION = 'Windows Federated Search for PHP Developers Demo';
const SERVER_NAME = 'localhost';
const SERVER_PORT = 80;
const SERVER_ENDPOINT_PROXY = 'itgproxy'; /* CURLOPT_PROXY */
const SERVER_ENDPOINT_PROXY_PORT = '80'; /* CURLOPT_PROXYPORT */
}
步骤 3 - 使用浏览器测试 Windows 联合搜索 Web 服务终结点
如前所述,Windows 联合搜索需要来自 OpenSearch Web 服务的 RSS-2 feed。验证您的 OpenSearch Web 服务是否正常运行的最简单方法是,在浏览器中向其终结点执行搜索请求。
演示提供的最简单的解决方案是打开 **Internet Explorer 8** 浏览器,并导航到 WindowsFederatedSearch4PHP 的 URL 路径的根目录。
http://hostname:port/.../WindowsFederatedSearch4PHP/index.php
这将为 **Internet Explorer 8** 浏览器提供一个 OpenSearch 描述 (OSD) 文档,该文档将在浏览器右上角的搜索框中显示。
例如,如果 **WindowsFederatedSearch4PHP** 安装在 localhost:80 上,则以下链接应该可以工作,直接为 Internet Explorer 8 浏览器获取 OpenSearch 描述文档:
https:///WindowsFederatedSearch4PHP/index.php
在此搜索框中输入股票代码 **MSFT SY BA**,并选择 **"Windows Federated Search 4 PHP"**,如果一切设置正确,浏览器应该会列出最新的股票行情。
发生的情况是,**"Windows Federated Search 4 PHP"** 选择项是对 OpenSearch 终结点 URL 的引用,浏览器会根据用户提供的搜索词构建查询。对于此演示,以下 URL 路径执行股票行情搜索请求:**MSFT SY BA**
默认的 OpenSearch 描述将使用 **format=html** 和 **source=IE-SearchBox**,正如前面图所示:
http://hostname:port/.../WindowsFederatedSearch4PHP/search.php?query=MSFT+SY+BA&format=html&src=IE-SearchBox&start=1&cnt=10
对于 Windows 联合搜索,OpenSearch 结果需要是 **format=rss**
http://hostname:port/.../WindowsFederatedSearch4PHP/search.php?query=MSFT+SY+BA&format=rss
例如,如果 **WindowsFederatedSearch4PHP** 安装在 localhost:80 上,则以下链接应该可以工作:
https:///WindowsFederatedSearch4PHP/search.php?query=MSFT+SY+BA&format=rss
如果 RSS feed 正常运行,那么您的浏览器中应该会显示以下 feed:
Internet Explorer – 启用 Feed 阅读
如果您使用的是 Internet Explorer (IE) 并且看到原始 RSS XML feed,那么您需要在此浏览器中启用读取此 feed 的功能。
在 IE 浏览器的菜单栏中,选择 **工具 > Internet 选项**,然后选择 **内容** 选项卡。在 **内容** 选项卡中的 **Feed 和 Web Slices** 部分,选择 **设置** 按钮。
步骤 4 - 修改 OpenSearch 描述文档 - WindowsFederatedSearch4PHP.osdx
此步骤设置演示的 OpenSearch 描述文档 **WindowsFederatedSearch4PHP.osdx**,该文档用于在 **Windows 7 Explorer** 中建立 **搜索连接器**。
如果 **WindowsFederatedSearch4PHP** 的此设置位置为 URL https:///WindowsFederatedSearch4PHP/,则可以跳过此步骤。
需要进行三处修改,所有修改都应该具有相同的路径值。默认情况下,以下所有三项都具有值 https:///WindowsFederatedSearch4PHP/:
- URL type="application/rss+xml"
- URL type="text/html"
- Image
XML – WindowsFederatedSearch4PHP.osdx
修改 OpenSearch 终结点的路径
<?xml version="1.0" encoding="UTF-8"?>
<OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/" >
<ShortName>WindowsFederatedSearch4PHP</ShortName>
<Description>Windows Federated Search For PHP Developers</Description>
<!-- BEGIN: templates for Search Provider Endpoints and Image. -->
<!-- TODO: Replace https:///WindowsFederatedSearch4PHP/ with Search Providers URL. -->
<Url type="application/rss+xml" template="https:///WindowsFederatedSearch4PHP/search.php?query={searchTerms}&format=rss&src=ms-ose&start={startIndex}&cnt={count}"/>
<Url type="text/html" template="https:///WindowsFederatedSearch4PHP/search.php?query={searchTerms}"/>
<Image height="16" width="16" type="image/x-icon">https:///WindowsFederatedSearch4PHP/favicon.ico</Image>
<!-- END: templates for Search Provider Endpoints and Image. -->
</OpenSearchDescription>
步骤 5 - 安装 Windows 联合搜索描述文档
在 Windows 7 客户端中,双击您的 Windows 联合搜索描述 (OSD) 文档 (WindowsFederatedSearch4PHP.osdx),这将执行 **"创建搜索连接器"**。这将在客户端 Windows Explorer 的 **"搜索"** 框中添加一个指向您的 Windows 联合搜索 Web 服务终结点的新连接。
步骤 6 - 在 Windows 7 Explorer 中执行搜索
以下图显示了基于在 Windows 7 Explorer 中执行的股票代码搜索请求的 Windows 联合搜索结果。搜索框包含这些代码:
MSFT SY BA.
有用提示
支持 OpenSearch 的 Internet Explorer 浏览器
OpenSearch 在 **IE-7** 浏览器中引入到 IE 搜索框中,并沿用到 **IE-8** 浏览器。然而,令人沮丧的是,OpenSearch 功能已从 **IE-9** 中删除。
调试 OpenSearch 描述 OSDX
如果在提供 **OpenSearch 网站**供 IE 搜索框在 **IE-8 浏览器**中选择的初始阶段,它未被识别;则通过浏览器下载 **description.php** 来收集生成的 OSDX:
保存的 description.php 文件将包含生成的 OSDX。接下来,验证 OpenSearch XML 描述是否完整且没有额外字符。例如,这是另一个 OpenSearch 网站通过其 description.php 生成的有效 OSDX 内容:http://.../WindowsFederatedSearch4PHP/description.php
<OpenSearchDescription
xmlns="http://a9.com/-/spec/opensearch/1.1/"
xmlns:referrer="http://a9.com/-/opensearch/extensions/referrer/1.0/"
xmlns:time="http://a9.com/-/opensearch/extensions/time/1.0/">
<ShortName>Windows Federated Search 4 PHP</ShortName>
<Description>Windows Federated Search for PHP Developers Demo</Description>
<Url type="text/html" template="http://www.jeff00seattle.com/Projects/WindowsFederatedSearch4PHP/search.php?query={searchTerms}&format=html&src={referrer:source?}&start={startIndex}&cnt={count}" />
<Image height="16" width="16">http://www.jeff00seattle.com/Projects/WindowsFederatedSearch4PHP/favicon.ico</Image>
<Language>*</Language>
</OpenSearchDescription>
历史
- 2012 年 2 月 29 日 -- 更新了 WindowsFederatedSearch4PHP_1_0_0_6.zip
- 2012 年 2 月 29 日 -- 添加了新的“有用提示”部分