SharePoint 的全局解决方案

SharePoint 中的搜索功能在单个企业搜索平台上,将轻松配置和部署与 FAST Search Server 的可伸缩性和可扩展性完美结合。

SharePoint 包括搜索平台中有助于对不同方案自定义搜索的常见模式。 例如:

  • 视频搜索对话搜索作为现成的垂直搜索提供。
  • 主题页面和“按内容搜索”增强了 Web 内容管理功能和场景,例如搜索驱动的网站和知识管理网站。
  • “我的任务”将项目任务集中在一起,确保用户可以在一个中央位置(即 OneDrive for Business 网站)跟踪在多个网站中分配的任务。

SharePoint 搜索体系结构

SharePoint 中的搜索体系结构包括协同工作的组件和数据库。

SharePoint 中的搜索组件

组件 说明
爬网 对内容源进行爬网,以收集属性和元数据并将这些信息发送到内容处理组件。
内容处理 转换已爬网项目并将其发送到索引组件。
此组件还将已爬网的属性映射到托管属性。
分析处理 执行搜索分析和使用情况分析。
索引 从内容处理组件中搜索已处理的项目并将其写入搜索索引。
此组件还可以处理传入查询、从搜索索引中检索信息,并将结果集发送回查询处理组件。
查询处理 分析传入查询。 这有助于提高精确度、改进检索和提高相关性。
查询将发送到索引组件,该组件将为查询返回一组搜索结果。
搜索管理 运行系统处理以供搜索,并添加和初始化搜索组件的新实例。

SharePoint 中的搜索数据库

数据库 说明
爬网 存储跟踪信息和有关已爬网项目(如文档和 URL)的历史信息。
还将存储上一次爬网时间、上一次爬网 ID 和上一次爬网期间的更新类型(添加、更新、删除)等信息。
链接 存储由内容处理组件提取的未处理信息和有关搜索单击的信息。
分析处理组件将分析此信息。
分析报告 存储使用情况分析的结果。
搜索管理 存储搜索配置数据。

爬网和内容处理

爬网过程从内容的不同源开始(例如 HTTP、文件共享和 SharePoint)。 若要将内容添加到索引中,爬行程序使用连接器告知爬行程序如何连接到内容源并访问源中的内容项。 爬网程序找到内容项后,它使用适用的格式处理程序来分析内容。

检索内容之后, 爬网组件将已爬网项目传递到内容处理组件,后者将处理项目并将其发送到索引组件。 这包括文档分析、将已爬网的属性映射到其关联的托管属性和语言处理,如语言检测和实体提取。 内容处理组件还会将关于链接和 URL 的信息写入到链接数据库。

查询处理

查询处理组件分析并处理搜索查询以优化精确度、回调和相关性,包括执行单词分解和词干提取等语言处理。 已处理的查询将提交到索引组件,这会向查询处理组件返回基于已处理查询的结果集,后者将会处理该结果集。

搜索分析

SharePoint 分析内容本身(搜索分析)以及用户与之交互的方式(使用情况分析),然后使用此信息来改进搜索。

搜索分析是指从链接数据库提取信息,例如链接、某个项的点击次数、定位文本、用户相关数据和元数据。 搜索分析是确定相关性的基础。

另一方面,使用情况分析是指分析通过事件存储从前端接收的使用情况日志信息。 使用情况分析构成使用情况和统计报告的基础。

分析结果将添加到搜索索引中的项目。 此外,使用情况分析结果存储在分析报告数据库中。

用于自定义搜索体验的构建块

SharePoint 和 SharePoint Online 中的搜索包括新功能和改进,可以自定义搜索体验。 许多方面的改进无需编写代码。 SharePoint 搜索包括 CSOM 和 REST API,在需要时可帮助编写自定义项代码,或者如果你想要创建外接程序以便在 SharePoint 外部访问 SharePoint 搜索结果。

新功能和改进包括以下方面:

  • 搜索中心网站
  • 搜索中心 Web 部件
  • 结果源
  • 查询规则
  • 查询转换
  • 结果类型和显示模板

搜索中心网站

搜索中心是 SharePoint 针对搜索设置的网站。 它是一个门户,可以通过它在组织的 Intranet 中搜索内容,它还提供了一个集中式且高度可自定义的用户界面。 本部分介绍搜索中心的页面和 Web 部件,以及可修改的搜索配置设置,以创建自定义搜索应用程序或搜索体验,而无需编写大量代码。

创建搜索中心网站时,SharePoint 会创建一个默认的搜索主页和一个默认的搜索结果页。 此外,还会创建多个称为垂直搜索的页面。 垂直搜索是可自定义以搜索特定内容类型的搜索结果页面(例如"人员"和"视频"),它们会显示针对特定内容类型或类进行筛选和格式化的搜索结果。

在搜索中心网站集的“页面”库中创建以下页面:

  • default.aspx – 搜索中心的主页,以及最终用户在其中输入其查询的页面。
  • results.aspx – 搜索中心的默认搜索结果页。 它也是“全部内容”垂直搜索的搜索结果页。
  • peopleresults.aspx人员垂直搜索的搜索结果页。
  • conversationresults.aspx对话 垂直搜索的搜索结果页。
  • videoresults.aspx视频 垂直搜索的搜索结果页。
  • advanced.aspx – 最终用户可在其中对其搜索短语应用限制的搜索页面,例如,将搜索限制为确切的短语。

所有垂直搜索页面都包含搜索结果 Web 部件,尽管 Web 部件对每个垂直搜索的配置方式不同。 对于每个垂直搜索页,搜索结果 Web 部件中的查询将定向到一个特定的结果源,适用于该垂直搜索。 例如,peopleresults.aspx 页上的搜索结果 Web 部件中的查询限制为“本地人员结果”结果源。 了解如何配置 SharePoint 中的默认垂直搜索可帮助创建你自己的垂直搜索或自定义搜索中心。

以下是可帮助你与搜索中心协同工作的其他资源:

搜索中心 Web 部件

搜索中心页面包含四种类型的 Web 部件:搜索框、搜索结果、搜索导航和精简。

搜索框 Web 部件

搜索框 Web 部件显示一个文本框,用户可在其中输入要搜索的文本。 默认情况下,搜索框 Web 部件用于搜索中心主页 (default.aspx) 以及所有默认搜索结果页面(results.aspx、peopleresults.aspx、conversationresults.aspx 和 videoresults.aspx)。

您可以通过在 Web 部件工具窗格中编辑属性来自定义搜索框 Web 部件。 这样您就可以执行以下操作:

  • 更改搜索结果的显示位置。 例如,您可以在自定义搜索结果 Web 部件或自定义搜索结果页面上显示结果。
  • 关闭查询建议和人员建议。
  • 显示搜索首选项页面和高级搜索页面的链接。
  • 更改 Web 部件的显示模板。

有关详细信息,请参阅:

搜索结果 Web 部件

搜索结果 Web 部件显示搜索查询的结果。 默认情况下,搜索结果 Web 部件用于所有默认的垂直搜索页面(results.aspx、peopleresults.aspx、conversationresults.aspx 和 videoresults.aspx)。 搜索结果 Web 部件还会将搜索结果发送到精简 Web 部件和搜索导航 Web 部件,因此搜索结果页面上必须有搜索结果 Web 部件,才能使其他搜索 Web 部件运行。

可以在 Web 部件工具窗格中编辑搜索结果 Web 部件属性,以更改搜索查询并更改搜索结果页面上结果的行为和外观。

通过更改属性值,可以执行以下操作:

  • 更改结果源以指定应搜索的内容。
  • 添加查询变量或属性筛选器以自定义不同用户或用户组的搜索结果。
  • 在搜索结果中将项目升级或降级。
  • 更改搜索结果的排序。
  • 更改显示模板。

有关搜索结果 Web 部件的详细信息,请参阅:

搜索导航 Web 部件

搜索导航 Web 部件显示让用户可在不同垂直搜索(所有内容、人员、对话和视频)之间快速移动的链接。 搜索导航 Web 部分使用搜索结果 Web 部件的搜索结果,以便当用户选择一个垂直搜索链接时,搜索结果会根据垂直搜索设置的方式进行筛选和显示。

可以通过在 Web 部件工具窗格中编辑搜索导航 Web 部件属性来自定义 Web 部件,如下所示:

  • 指定要从其获取结果的不同 Web 部件。
  • 更改要显示的垂直搜索链接的数量。
  • 更改 Web 部件的外观和布局。

此外,在功能区中,你可以选择“网站设置”>“搜索设置”以进行以下更改:

  • 更改链接显示名称。
  • 更改链接顺序。

精简 Web 部件

精简 Web 部件将搜索结果筛选到名为精简条件的类别中。 用户可选择这些精简条件来缩小搜索结果。 精简条件是标记为 可精简可查询的托管属性。 有关这些设置的详细信息,请参阅 SharePoint Server 中的搜索架构概述中的“托管属性设置概述”

可以在 Web 部件工具窗格中编辑精简 Web 部件属性以指定以下内容:

  • 将从哪个搜索结果 Web 部件筛选搜索结果。
  • 要用于精简 Web 部件的精简条件。
  • 应用于每个精简条件的显示模板。
  • 精简 Web 部件的外观、布局和行为。

默认情况下,精简 Web 部件不会显示每个精简条件值的结果数。 可通过修改精简条件的显示模板来添加精简计数。

有关此功能的详细信息,请参阅在 SharePoint Server 中配置精简 Web 部件的属性

有关精简 Web 部件和精简条件的详细信息,请参阅:

结果源

结果源将搜索限制到特定内容或部分搜索结果。 您可以通过指定以下内容来定义结果源:

  • 要从其中获取搜索结果的搜索提供程序或源 URL,例如本地 SharePoint Search 服务的搜索索引。
  • 用于获取搜索结果的协议,例如 OpenSearch 协议。
  • 查询转换,可以将结果从指定搜索提供程序或 URL 缩小到特定的结果子集,例如,缩小到具有特定内容类型的结果集。

SharePoint 提供 16 种预配置的结果源,包括本地 SharePoint 结果、对话以及与当前用户相关的项目。 可以从“管理结果源”页面(“网站设置”>“搜索”>“结果源”)查看有关结果源的详细信息。

可以从“管理结果源”页面使用以下两种方法之一来创建新结果源:

  • 选择“新建结果源”并选择你想要的结果源。 有关详细信息,请参阅在 SharePoint Server 中配置搜索的结果源
  • 指向现有结果源旁边的箭头,选择“复制”,然后根据需要修改副本,并使用新名称将其保存。

结果源指定四个协议之一,以获取搜索结果。 如果结果源使用除“本地 SharePoint”之外的其他协议,则结果源也必须指定要从中获取搜索结果的 URL。

结果源协议及其提供程序

结果源协议 提供程序 URL
本地 SharePoint 本地 Search Service 的搜索索引。 不适用
远程 SharePoint 在另一个服务器场中托管的 Search Service 的搜索索引。 远程 SharePoint 服务器场的根网站集的地址。
OpenSearch 1.0/1.1 使用 OpenSearch 协议提供搜索结果的外部搜索提供程序(如远程搜索引擎或源)。 使用 OpenSearch 协议的搜索提供程序的 RSS 源的 URL。
Exchange Exchange Web 服务 (EWS)。 EWS URL。

有关详细信息,请参阅以下资源:

查询规则

使用查询规则可自定义对您的用户特别重要的查询的搜索体验。 在查询规则中,您可指定上下文、条件和关联操作。 然后在指定上下文中,当查询满足指定条件时,搜索将执行关联操作,以改进搜索结果的相关性。

关于上下文,您可以限制以下查询规则查询:

  • 在指定的结果源上执行。
  • 从指定的主题类别。
  • 由匹配指定用户区段的用户执行。

下表列出了可以指定的、导致查询规则运行的条件。

查询规则条件

条件 说明
查询完全匹配关键字 当查询完全匹配您指定的单词或短语时应用查询规则。
查询包含操作术语 当查询包含指示用户正在尝试执行某些操作的单个单词或短语时应用查询规则。
术语必须位于查询的开头或结尾,可能是一个动词、命令或筛选器。
查询完全匹配词典 当查询完全匹配字典条目时应用查询规则。
此条目可以是术语库中的术语,也可以是人名字典中的条目。
源中更常用的查询 如果用户查询较当前查询更常用于不同的结果源,则应用查询规则。
此条件使用用户在各种结果源中输入的查询分析。
通常单击的结果类型 如果查询通常在用户选择特定结果类型的结果时结束,则应用查询规则。
在创建新的结果类型时,可指示应记录这些选择以将其用于查询规则。
高级查询文本匹配 当查询匹配正则表达式,应用查询规则。
它还允许你使用前面介绍的关键字、操作术语和词典条件的变体,但具有更高级的控制能力。

查询规则可以指定三种类型的操作:

  • 添加出现在排名结果上方的升级结果(以前称为最佳匹配)。 例如,对于病假查询,查询规则可以指定一个特定的升级结果,例如指向关于公司请假政策说明的网站的链接。

  • 添加一个或多个结果组(称为结果块)。 结果块包含在某个方面与查询相关的一小部分结果。 与单个结果一样,您可以升级结果块,并将其与其他搜索结果一起排名。

  • 通过更改查询更改排名结果。 例如,对于包含“download toolbox”的查询,查询规则可能会将“download”一词识别为操作术语,并提升指向你的 Intranet 上的特定下载网站的搜索结果。

有关查询规则的详细信息,请参阅在 SharePoint Server 中管理查询规则

查询转换

若要提供适用于用户查询的搜索结果,有时需要修改查询。 使用查询转换执行此操作。 SharePoint 随附的默认垂直搜索,如视频、人员和对话,所有这些都包含预定义的查询转换,以优化该垂直搜索体验。

可在三个位置配置查询转换:

  • 在 Web 部件中,例如搜索结果 Web 部件。
  • 在查询规则中,其中指定了仅当满足特定条件时才会执行的特定操作。
  • 在查询用于获取搜索结果的结果源中。

用户查询首先由 Web 部件进行转换,然后由应用的任何查询规则进行转换,最后由结果源进行转换。 在结果源中配置转换时,你知道转换更改不会被丢弃或覆盖,因为结果源最后转换查询。 可以在 Web 部件或结果块中重用结果源查询转换,可以创建只适用于某些结果源结果的查询规则或结果类型。

可以使用查询生成器来帮助你编写和测试查询转换。 可以通过为查询变量设置临时测试值、运行查询和预览搜索结果,在查询生成器中测试查询。

有关查询转换的详细信息,请参阅在 SharePoint Server 中规划查询转换和结果排序

结果类型和显示模板

SharePoint 搜索包括新的结果框架,可以轻松地自定义搜索结果的显示方式。 现在,无需写入自定义 XSLT 来更改搜索结果的显示方式,可以通过使用显示模板和结果类型来自定义重要结果类型的外观。

结果类型

要以不同方式显示搜索结果,搜索结果必须分类到不同的结果类型。 结果类型是将一个搜索结果与另一个搜索结果区分开来的搜索结果分类。 它由以下内容的集合组成:

  • 规则 - 要比较每个搜索结果的一个或多个特征或条件,例如搜索结果的结果源或内容类型。 可以使用相等、比较和逻辑运算符联接规则条件。

  • 属性 – 搜索结果的托管属性列表。 必须先将托管属性添加到属性列表,然后才能将托管属性映射到显示模板。

  • 显示模板 – 控制满足条件的所有结果在搜索结果页上的显示和行为方式。

SharePoint 搜索包括几个默认结果类型。 若要对其查看,请转到“网站设置”>“网站集管理”>“搜索结果类型”。 不能编辑任何默认结果类型。 可以通过复制现有结果类型并对其进行修改来创建新的结果类型。

有关 SharePoint 所包括的默认结果类型的详细信息,请参阅在 SharePoint Server 中用于显示搜索结果的结果类型和显示模板

显示模板

显示模板定义搜索结果的可视布局和行为。 它们控制哪些托管属性将显示在搜索结果中及其显示方式。 SharePoint 将显示模板存储在母版页样式库的"显示模板"文件夹的"搜索"子文件夹中。 每个显示模板由两个文件组成:

  • 您可以在 HTML 编辑器中编辑的 HTML 版本的显示模板。
  • SharePoint 使用的 .js 文件。

使用显示模板时,可以修改 HTML 文件。 .js 文件由 SharePoint 创建和修改。 根本不编辑此文件。

显示模板有两种主要类型:

  • 控件显示模板 - 确定结果呈现方式的整体结构。
  • 项显示模板 – 确定集中每个结果的显示方式。

控件显示模板提供了 HTML,以构建希望的搜索结果显示方式的整体布局。 例如,控件显示模板可能会提供列表标头及开头和结尾的 HTML。 控件显示模板仅在 Web 部件中呈现一次。

项显示模板提供的 HTML 决定每个项目在结果集中的显示方式。 例如,项显示模板可能会提供列表项的 HTML,其中包含的图片和三行文本映射到与项目关联的不同托管属性。 每个项目的项显示模板在结果集中呈现一次。 因此,如果结果集包含十个项目,则项显示模板会创建 HTML 部分十次。

有关显示模板及其结构的详细信息,请参阅:

有关 SharePoint 中可用的显示模板的详细信息,请参阅在 SharePoint Server 中显示模板引用

自定义显示模板

如果要自定义 SharePoint 中包含的显示模板,可以通过复制要修改的模板中的内容来创建一个新的显示模板,然后自定义新版本。 从现有显示模板的副本开始也是创建新模板最为简单的方法,因为它确保你从所有必需的元素开始。

在使用显示模板时,另一个技巧是将网络驱动器映射到母版页样式库。 有关详细信息,请参阅将网络驱动器映射到 SharePoint 母版页样式库

用于显示模板的 HTML 文件是一个完整的 HTML 文档,具有 headbody 元素。 在 head 元素中,有一个指定显示模板显示名称的 title 元素。 当在 SharePoint UI 中进行配置时(例如,配置结果类型时),会显示此标记中的文本。

title 元素后,有自定义文档属性元素 mso:CustomDocumentProperties。 在项目显示模板中,该元素包含 mso:ManagedPropertyMapping 元素,它是 SharePoint 搜索(将其映射到由显示模板所使用的值)使用的托管属性所在的位置。

以下是关于它的语法:<display template reference name>:<managed property name>,如下面的示例所示。

<mso:ManagedPropertyMapping msdt:dt="string">'Title':'Title','Path':'Path','Description':'Description'

body 元素中,有一个 script 元素,其中可以包含外部资源,如 CSS 文件或显示模板之外的 JavaScript 文件。 有关演示如何在脚本元素中添加外部资源的示例,请参阅 SharePoint 设计管理器显示模板中的脚本块部分。

下一个元素是 div 元素。 可在其中放置你希望作为显示模板一部分的任何 HTML 或脚本。 熟悉显示模板结构的一个好方法是下载用于搜索结果的默认显示模板的副本,Control_SearchResults.html (控件显示模板) ,并 Item_Default.html (项显示模板) 。

下面是其他一些有关显示模板和结果类型的资源:

查询 API 和搜索外接程序

SharePoint 搜索包括 .NET 和 JavaScript 客户端对象模型以及 REST 服务,可通过此服务访问联机、内部和移动开发的搜索结果。

搜索查询 API

API 类库或架构路径 示例
.NET CSOM Microsoft.SharePoint.Client.Search.dll

SharePoint Server 2013 客户端组件 SDK
%ProgramFiles%\Common Files\Microsoft Shared\web server extensions\15\ISAPI

SharePoint Online 客户端组件 SDK
%ProgramFiles%\Common Files\Microsoft Shared\web server extensions\16\ISAPI
使用托管客户端对象模型的查询搜索(代码库)
JavaScript CSOM SP.search.js
%ProgramFiles%\SharePoint Client Components\Scripts
使用 JavaScript 客户端对象模型的查询搜索(代码库)
REST 服务 http://server/_api/search/query

http://server/_api/search/postquery

http://server/_api/search/suggest
从 SharePoint 外接程序使用搜索 REST 服务(代码库)

搜索查询 .NET CSOM

要使用查询 .NET CSOM,请创建 T:Microsoft.SharePoint.Client.ClientContext 类的一个新实例,此类位于 Microsoft.SharePoint.Client.dll 中的 Microsoft.SharePoint.Client 命名空间。 然后使用 Microsoft.SharePoint.Search.Client.Query 命名空间中的查询对象模型。

下面展示了一个非常简单的示例。

using Microsoft.SharePoint.Client; 
using Microsoft.SharePoint.Client.Search.Query;
…
using (ClientContext clientContext = new ClientContext("http://intranet.contoso.com"))
{
    KeywordQuery keywordQuery = new KeywordQuery(clientContext);
    keywordQuery.QueryText = "Argument";
    SearchExecutor searchExecutor = new SearchExecutor(clientContext);
    ClientResult<ResultTableCollection> results = searchExecutor.ExecuteQuery(keywordQuery);
    clientContext.ExecuteQuery();
}
 

现在您可循环访问搜索结果。 下面的示例列出了每个结果的标题。

foreach (var row in results.Value[0].ResultRows) 
{ 
    Console.WriteLine(row["Title"]); 
}

搜索查询 REST 服务

搜索查询 REST 服务支持 HTTP POSTGET 请求。 当对搜索 REST 服务进行调用时,使用请求指定查询参数,并使用这些查询参数进行搜索,以构建搜索查询。 借助 GET 请求指定 URL 中的查询参数。 对于 POST 请求,你在正文中传递查询参数(以 JavaScript 对象表示法 (JSON) 格式表示)。

JSON GET 和 POST 请求

谓词 URI
GET 请求 http://server/_api/search/query
POST 请求 http://server/_api/search/postquery

搜索 REST 服务的示例 GET 请求

请求类型 请求 URL
关键字 http://server/site/_api/search/query?querytext='{KQL Query}'
选择属性 http://server/site/_api/search/query?querytext='test'&selectproperties='Title,Rank'
排序 http://server/site/_api/search/query?querytext='test'&sortlist='LastModifiedTime:descending'

http://server/site/_api/search/query?querytext='test'&sortlist='LastModifiedTime:descending,Rank:ascending'

有关可用查询参数的完整列表,以及它们的使用方式,请参阅 SharePoint 工作流基础知识

有关示例代码,请参阅从 SharePoint 外接程序使用搜索 REST 服务

搜索外接程序

SharePoint 外接程序(以前称为“SharePoint 相关应用程序”)为自包含功能,可扩展 SharePoint 网站的功能。 搜索外接程序(以前称为“搜索应用”)是使用搜索功能的 SharePoint 外接程序。 在搜索外接程序中,可以使用搜索查询 API 来检索搜索结果。 此外,还可使用它将搜索配置从一个 SharePoint 分发到另一个 SharePoint。

有关如何设置开发环境以创建搜索外接程序的信息,请参阅 设置 SharePoint 加载项的本地开发环境在 Office 365 上设置 SharePoint 加载项的开发环境

权限

搜索加载项只需要用户级权限,其中属性值为 QueryAsUserIgnoreAppPrincipal。 此权限允许你根据用户权限来查询搜索外接程序。 这意味着搜索结果根据用户的 ACL 返回。 若要向外接程序授予使用搜索的权限:

  1. 在“解决方案资源管理器”中,打开“AppManifest.xml”

  2. 在“权限“选项卡上,选择“搜索范围”,然后选择“QueryAsUserIgnoreAppPrincipal”

有关详细信息,请参阅 SharePoint 中的外接程序权限

查询 API

可以使用 .NET CSOM JavaScript CSOM 或搜索 REST 服务来检索搜索外接程序中的搜索结果。 以下示例演示如何使用查询 .NET CSOM 来检索搜索外接程序中的搜索结果。

var spContext = SharePointContextProvider.Current.GetSharePointContext(Context);
using (var clientContext = spContext.CreateUserClientContextForSPHost())
{
    KeywordQuery keywordQuery = new KeywordQuery(clientContext);
    keywordQuery.QueryText = "Argument";
    SearchExecutor searchExecutor = new SearchExecutor(clientContext);
    ClientResult<ResultTableCollection> results = searchExecutor.ExecuteQuery(keywordQuery);
    clientContext.ExecuteQuery();
}

另请参阅