在 Windows 联合搜索中启用数据存储库

介绍如何允许 OpenSearch Web 服务访问数据存储,以及如何避免这样做的潜在障碍。

本主题按如下所示进行组织:

搜索请求接受的条件

在 Web 服务器上创建的 OpenSearch Web 服务 必须 满足以下两个要求:

  • 能够接受来自客户端的 GET URL 查询。

  • 允许在 URL 中嵌入搜索词。

    以下示例演示如何在 URL 中嵌入搜索词。

    https://example.com/search.aspx?query=terms&param=mysearchword
    

注释

联合搜索不支持向 Web 服务发送 POST 请求。

 

有关构造 URL 的详细信息,请参阅 在 Windows 联合搜索中创建 OpenSearch 说明文件中的“URL 模板参数”。

支持的查询语法

Windows 7 中没有预期的特定查询语法。 OpenSearch 提供程序接受用户在 Windows 资源管理器的输入框中输入的任何术语,并将其编码为 URL。 它根据"在 Windows 联合搜索中创建 OpenSearch 描述文件"的“URL 模板参数”中所述的 URL 模板进行操作。

用户期望将单独的术语隐式地用 AND 连接在一起。 例如,对“Microsoft Windows”的查询应仅返回同时包含“Windows”和“Microsoft”的结果。

支持的身份验证协议

Windows 联合搜索支持基于 Windows 的身份验证,并且可以通过以下协议向 Web 服务提供凭据:

  • NTLM.
  • Kerberos。
  • 基本(仅通过 https 加密)。
  • 在 Windows 上安装的其他安全支持提供程序(SSP)提供额外的查询容量。 请参阅 SSP 接口 SDK 文档,了解其他 SSP 的潜在添加。

在 RSS 或 atom 中发送查询并返回搜索结果

OpenSearch 提供程序负责将 XML 元素值映射到 Windows 应用程序可以使用的 Windows Shell 系统属性。 但是,你并不局限于标准 RSS 或 Atom 元素的默认映射,并且可以在每个属性的 Windows 命名空间中包含自定义 XML 元素。 例如,可以在 项 元素中添加自己的自定义 XML 元素,以便向 Windows 提供其他元数据。 还可以映射来自其他 XML 命名空间的元素,例如 iTunes

RSS 源输出示例

以下示例 RSS 源返回的内容仅包含一个项目。

<rss version="2.0" xmlns:media="https://search.yahoo.com/mrss/" xmlns:example="https://example.com/namespace">
   <channel>
      <title>Search Results</title>
      <item>
         <title>An example result</title>
         <link>https://example.com/pictures.aspx?id=01</link>
         <description>This is a test of the emergency search results system. If this were a real emergency result, you'd be reading something more useful.</description>
         <pubDate>Wed, 1 Oct 2008 23:12:00 GMT</pubDate>
         <media:content url="https://example.com/pictures/picture01.jpg" fileSize="212889" type="image/jpeg" height="768" width="1024"/>
         <media:thumbnail url="https://example.com/thumbnails/picture01.jpg" height="120" width="160"/>
         <example:dateTaken>Mon, 22 Sep 2008 23:12:00 GMT</example:dateTaken>
      </item>
   </channel>
</rss>

有关属性映射的更多详细信息,请参阅 Windows 联合搜索中创建 OpenSearch 说明文件中的“WIndows 联合搜索中的扩展元素”和“自定义属性映射”部分。

自动映射到 Windows Shell 属性

在 RSS 源中,你可以选择在条目中包含其他自动映射到 Windows Shell 系统属性的 XML 元素。 为此,请包含一个以 Windows Shell 属性命名的元素,并带有 Windows Shell 系统命名空间的前缀。 以下示例演示命名空间 win=" http://schemas.microsoft.com/windows/2008/propertynamespace" 的声明,以及包含用于属性映射的元素 win:System.Contact.PrimaryEmailAddress:

<rss version="2.0" xmlns:example="https://example.com/schema/2009" xmlns:win="http://schemas.microsoft.com/windows/2008/propertynamespace">
...
   <item>
      <title>Someone</title>
      <win:System.Contact.PrimaryEmailAddress>[email protected]
   </win:System.Contact.PrimaryEmailAddress>
   </item>

此处使用的命名空间前缀("win")是建议;可以使用任何前缀。 但是,必须使用确切的 Windows Shell 属性名称,并且必须包含确切的统一资源标识符(URI),如以下示例所示:

http://schemas.microsoft.com/windows/2008/propertynamespace

关于 Windows Shell 系统属性

Windows 定义 系统属性 的完整列表以及每个属性所需的值类型格式。 例如 ,System.FileExtension Window Shell 属性的文档指定该值必须包含前导点(“.docx”而不是“docx”)。

日期和时间值

首选日期和时间格式为 ISO-8601,如以下示例所示:

2008-01-16T 19:20:30:.45+01:00

.NET 开发人员应使用 DateTime 类 ToString("R") 输出正确的格式。

有关属性映射的更多详细信息,请参阅在 Windows 联合搜索中创建 OpenSearch 说明文件中的“Windows 联合搜索中的扩展元素”。

了解 Windows 如何将项映射到文件类型

当 RSS 项指向远程存储的文件时,Windows 资源管理器 UI 中的搜索允许用户将结果视为文件。 用户可以将项拖放到桌面,Windows 资源管理器 UI 显示正确的图标并提供相应的快捷菜单。 如果 RSS 项不指向远程存储的文件,则该文件被视为链接,用户可以对其执行作,例如创建快捷方式或在浏览器中打开它。

以程图显示了 Windows 如何确定项的文件类型。

显示从项到决策的路径的流程图,以将其视为 Web 链接类型项或文件类型

OpenSearch 提供程序执行以下步骤,将项映射到文件类型:

  • 确定该项应被视为文件还是 Web 链接。
  • 标识要使用的正确文件扩展名。

例如,如果项具有使用文件系统路径(例如 file:///\\server\share\etc\item.ext)的链接 URL, 则 OpenSearch 提供程序会将链接视为文件,并按路径中使用的文件扩展名(此示例中的 .ext)确定类型。

如果项目使用标准 RSS 附件或 MediaRSS media:content 元素,则 OpenSearch 提供程序假定该项是文件,并按如下所示标识文件扩展名:

  • 如果为项映射 了 System.FileExtension Windows Shell 属性,提供程序将使用该文件扩展名。
  • 如果未映射 System.FileExtension Windows Shell 属性,提供程序将使用机箱或内容元素中指定的 Type 属性。 此元素应包含字符串 MIMEType ,例如 "image/jpeg"。 MIMEType如果与在客户端计算机上注册的文件扩展名相关联,则该项被视为该类型的文件。 MIMEType如果未与客户端计算机上注册的文件扩展名相关联,则该项将被视为 Web 链接类型。 OpenSearch 提供程序不会尝试分析 URL 属性以查找文件扩展名。
  • MIMEType如果与客户端计算机上注册的文件扩展名相关联,提供程序将确定文件扩展名是否为已知的 Web 文件类型(.htm、.html、.asp、.aspx、.php、.swf、.stm)。 如果是,则文件类型被视为 Web 链接类型;否则,它被视为文件类型。 例如,如果与 MIMEType "text/html" .htm 文件扩展名相关联,则该项被视为 Web 链接而不是 .htm 文件类型。

避免启用数据存储的潜在障碍

某些数据存储不提供 与 OpenSearch 兼容的 Web 服务,但仍可连接到 Windows 联合搜索。 此类数据存储包括:

  • 具有 Windows 7 联合搜索中不支持的身份验证方法的远程索引。

    示例包括基于表单的身份验证和其他自定义身份验证方法。

  • 如果高价值公共存储具有公共 Web API,任何人都可以编写另一个 与 OpenSearch 兼容的 Web 服务,并在后台调用这些 API。

    示例包括国会图书馆和医学研究数据库。

  • 专有企业数据存储或索引,以及旧式内容管理存储系统,这些系统可能难以提供前端接口。

但是,有一些替代方法可以避免启用数据存储的障碍。 以下是其中的一些替代方法:

如果无法修改现有数据源的 Web 服务,或者 Web 服务提供自定义 API,则编写中间人 Web 服务:

  1. 编写可接受 Windows 7 查询的中间人 Web 服务。
  2. 连接到数据源并检索查询结果。
  3. 以 RSS 或 Atom 格式重新格式化结果。
  4. 将结果返回到 Windows 7 客户端。
  5. 请注意,对于企业数据服务和许多 Internet 数据服务,可能需要代表 Web 服务传递用户凭据,以便根据用户的权限执行结果修整。

如果无法启用公共数据存储,请使用现有的搜索引擎:

  1. 使用已支持具有 RSS 的 OpenSearch 的公共搜索引擎。 为此,你可以向用户提供一个 .osdx 文件,该文件包含一个 URL 模板,该模板将结果限制为仅特定域的结果。

  2. 请参阅以下 OpenSearch 说明示例,了解如何使用针对 live.com 的查询仅搜索 Windows 的帮助内容。

    <?xml version="1.0" encoding="UTF-8"?>
    <OpenSearchDescription xmlns="https://a9.com/-/spec/opensearch/1.1/">
      <ShortName>Windows Help</ShortName>
      <Description>Search Windows Help using the live.com search engine</Description>
      <Language></Language>
      <Url type="text/html" template="https://windowshelp.microsoft.com/windows/search.aspx?=&amp;qu={searchTerms}"/>
      <Url type="application/rss+xml" template="https://api.search.live.com/rss.aspx?source=web&amp;query={searchTerms} site:windowshelp.microsoft.com&amp;web.count=50"/>
    </OpenSearchDescription>
    

如果无法启用专有企业数据存储或索引,请使用支持 OpenSearch 的现有索引服务器:

  1. 选择支持 OpenSearch 为内容编制索引的现有索引服务器,例如 SharePoint 搜索服务器。
  2. 创建一个 .osdx 文件,它通过使用 URL 模板中的 KeyWord 语法,将 SharePoint 索引的结果限制为仅从服务器获取的结果。

如果服务器端解决方案不起作用,则编写客户端数据存储:

  1. 编写一个客户端 OpenSearch 数据源,该数据源位于 Windows OpenSearch 提供程序与外部数据源之间。
  2. 使用 Windows SDK 中的 IOpenSearchSource 接口 API 创建一个适当配置的 .searchconnector-ms 文件,通过该文件,Windows 资源管理器可以使用查询参数调用您的实现。 然后,实现可以返回采用 RSS 或 Atom 格式格式化的结果。 这样做可使实现提供自定义身份验证 UI,并使用其专有 API 连接到数据源。

注释

打开 .osdx 文件会在 %userprofile%/search 目录中创建 .searchconnector-ms 文件(搜索连接器),并在 %userprofile%/links 目录中放置指向该文件的链接。

 

其他资源

有关在 Windows 7 及更高版本中使用 OpenSearch 技术实现对远程数据存储的搜索联合的其他信息,请参阅 Windows 中的联合搜索中的“其他资源”。

Windows 中的联合搜索

Windows 中的联合搜索入门

在 Windows 联合搜索中连接 Web 服务

在 Windows 联合搜索中创建 OpenSearch 说明文件

遵循 Windows 联合搜索中的最佳做法

在 Windows 联合搜索中部署搜索连接器