65.9K
CodeProject 正在变化。 阅读更多。
Home

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

starIconstarIconstarIconstarIconstarIcon

5.00/5 (3投票s)

2012年2月28日

GPL3

7分钟阅读

viewsIcon

33537

downloadIcon

277

如何构建一个 OpenSearch 数据源,该数据源可以通过 Windows 7 联合搜索功能进行搜索。遵循最佳实践,您可以实现您的远程数据源与 Windows 7 Explorer 的丰富集成,而无需编写任何客户端代码。

引言

Windows 7 通过使用 OpenSearch 技术,引入了对远程数据存储的搜索联合支持,使用户能够从 Windows Explorer 内部访问和交互他们的远程数据。

本文档介绍了如何构建一个可以通过 Windows 联合搜索进行搜索的基于 Web 的数据源。遵循此处描述的最佳实践,您可以实现您的远程数据源与 Windows Explorer 的丰富集成,而无需编写或部署任何 Windows 客户端代码。

搜索引擎自动发现

自动发现是一种自动查找与特定网页关联的机器可处理资源的方法。由于资源以明确定义的方式链接,因此发现过程可以自动化。

在我最初撰写本文时,所有主流浏览器(IE8、Chrome 和 Firefox)都公开支持对符合 OpenSearch 的终结点进行搜索引擎自动发现。然而,从那时起,只有 Firefox 仍然轻松地提供了添加 OpenSearch 提供程序的功能;使用 Chrome,您必须通过其“设置/管理搜索”进行操作,而 IE9 则完全放弃了此功能。

以下是一些关于为搜索引擎自动发现设置特定浏览器的精彩文章:

为了获得最佳的 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 服务终结点演示:

  1. 将 Windows Federated Search Demo Endpoint 文件夹 **WindowsFederatedSearch4PHP** 安装到 Web 服务中。
  2. 对于需要访问防火墙之外信息的数据源,可能需要在 **WindowsFederatedSearch_UserConfig.class.php** 中修改代理设置。
  3. 在浏览器中测试 Windows Federated Search Endpoint 的 RSS feed。
  4. 修改 Windows Federated Search 描述文档 **WindowsFederatedSearch4PHP.osdx** 中的 URL 路径。
  5. 部署 OSD 文档 **WindowsFederatedSearch4PHP.osdx**,在客户端的 **Windows 7 Explorer** 中创建一个 **搜索连接器**。

337549/imgWindowsFederatedSearchDemoSetup.png

步骤 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

337549/imgIE8AddingWinFedSearchEndpoint.png

在此搜索框中输入股票代码 **MSFT SY BA**,并选择 **"Windows Federated Search 4 PHP"**,如果一切设置正确,浏览器应该会列出最新的股票行情。

337549/imgWindowsFederatedSearchHtmlInBrowser.PNG

发生的情况是,**"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:

337549/imgWindowsFederatedSearchRssInBrowser.png

Internet Explorer – 启用 Feed 阅读

如果您使用的是 Internet Explorer (IE) 并且看到原始 RSS XML feed,那么您需要在此浏览器中启用读取此 feed 的功能。

337549/imgWindowsFederatedSearchRawRssInBrowser.png

在 IE 浏览器的菜单栏中,选择 **工具 > Internet 选项**,然后选择 **内容** 选项卡。在 **内容** 选项卡中的 **Feed 和 Web Slices** 部分,选择 **设置** 按钮。

337549/imgIE8InternetOptionsContentTab.png

在 **Feed 和 Web Slice 设置** 面板的 **高级** 部分,勾选 **启用 Feed 阅读视图** 复选框。然后重新打开浏览器。它应该会呈现如之前所示的样式化 RSS 视图。

337549/imgIE8FeedWebSettings.png

步骤 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 服务终结点的新连接。

337549/imgCreateSearchConnector.png

步骤 6 - 在 Windows 7 Explorer 中执行搜索

以下图显示了基于在 Windows 7 Explorer 中执行的股票代码搜索请求的 Windows 联合搜索结果。搜索框包含这些代码:
MSFT SY BA.

337549/imgWindowsFederatedSearchInWin7Exp.png

有用提示

支持 OpenSearch 的 Internet Explorer 浏览器

OpenSearch 在 **IE-7** 浏览器中引入到 IE 搜索框中,并沿用到 **IE-8** 浏览器。然而,令人沮丧的是,OpenSearch 功能已从 **IE-9** 中删除。

调试 OpenSearch 描述 OSDX

如果在提供 **OpenSearch 网站**供 IE 搜索框在 **IE-8 浏览器**中选择的初始阶段,它未被识别;则通过浏览器下载 **description.php** 来收集生成的 OSDX:

http://.../WindowsFederatedSearch4PHP/description.php

保存的 description.php 文件将包含生成的 OSDX。接下来,验证 OpenSearch XML 描述是否完整且没有额外字符。例如,这是另一个 OpenSearch 网站通过其 description.php 生成的有效 OSDX 内容:
<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 日 -- 添加了新的“有用提示”部分
© . All rights reserved.