使用 SharePoint 搜索查询 API

了解 SharePoint 中提供的查询 API,此类 API 可让您向自定义解决方案和应用程序添加搜索功能。

SharePoint 查询 API

SharePoint 中的搜索功能 提供了几个查询 API,这些 API 向你提供了许多用来访问搜索结果的方法,以便你可以在各种类型的自定义解决方案中返回搜索结果。

除了 SharePoint 之前版本中提供的服务器对象模型,SharePoint 中的搜索功能 还提供以下内容:

  • 客户端对象模型 (CSOM)
  • JavaScript 对象模型 (JSOM)
  • 代表性状态传输 (REST) 服务

表 1 显示了用于对搜索查询进行编程的 API 以及服务器上源文件的路径。

表 1. 搜索 API

API 名称 类库或架构和路径
.NET CSOM
Microsoft.SharePoint.Client.Search.dll
%ProgramFiles%\Common Files\Microsoft Shared\web server extensions\15\ISAPI
Silverlight CSOM
Microsoft.SharePoint.Client.Search.Silverlight.dll
%ProgramFiles%\Common Files\Microsoft Shared\Web server extensions\15\TEMPLATE\LAYOUTS\ClientBin
JavaScript CSOM
SP.search.js
%ProgramFiles%\Common Files\Microsoft Shared\Web server extensions\15\TEMPLATE\LAYOUTS
REST 服务终结点
https://{site_url}/_api/search/query
https://{site_url}/_api/search/suggest
服务器对象模型
Microsoft.Office.Server.Search.dll
%ProgramFiles%\Common Files\Microsoft Shared\web server extensions\15\ISAPI

作为 SharePoint 开发中的最佳实践,在可能的时候使用客户端 API。 客户端 API 包括 .NET、Silverlight、Phone 和 JavaScript 客户端对象模型,以及 REST 服务。 有关 SharePoint 中的 API 以及何时使用它们的详细信息,请参阅 在 SharePoint 中选择正确的 API 集

使用 .NET 客户端对象模型查询

SharePoint 中的搜索功能包括客户端对象模型,可通过此服务访问联机、内部和移动开发的搜索结果。 SharePoint CSOM 中的搜索功能是在 SharePoint CSOM 基础之上构建而成。 因此,客户端代码首先需要访问 SharePoint CSOM,再访问 SharePoint CSOM 中的搜索功能。 有关 SharePoint CSOM 和 ClientContext 类(它是 CSOM 的入口点)的详细信息,请参阅 使用 SharePoint 客户端库代码完成基本操作

对于 .NET 托管 CSOM,获取 ClientContext 实例(位于 Microsoft.SharePoint.Client.dll 中的 Microsoft.SharePoint.Client 命名空间中)。 然后使用 Microsoft.SharePoint.Client.Search.dll 中 Microsoft.SharePoint.Client.Search.Query 命名空间中的对象模型。

以下是一个基本示例。

using (ClientContext clientContext = new ClientContext("http://<serverName>/sites/<siteCollectionPath>"))
{
  KeywordQuery keywordQuery = new KeywordQuery(clientContext);
  keywordQuery.QueryText = "SharePoint";
  SearchExecutor searchExecutor = new SearchExecutor(clientContext);
  ClientResult<ResultTableCollection> results = searchExecutor.ExecuteQuery(keywordQuery);
  clientContext.ExecuteQuery();
}

若要下载示例,请参阅 SharePoint MVP Corey Roth 发布的以下代码示例:SharePoint:通过托管客户端对象模型查询搜索

使用 JavaScript 客户端对象模型查询

对于 JavaScript CSOM,请获取 ClientContext 实例,然后使用 SP.Search.js 文件中的对象模型。

以下是一个基本示例。

var clientContext = new SP.ClientContext("<serverRelativeUrl>");
var contextSite = clientContext.get_site();
var keywordQuery = new Microsoft.SharePoint.Client.Search.Query.KeywordQuery(clientContext);
keywordQuery.set_queryText("SharePoint");
var searchExecutor = new Microsoft.SharePoint.Client.Search.Query.SearchExecutor(clientContext);
var results = searchExecutor.executeQuery(keywordQuery);
context.executeQueryAsync(onQuerySuccess, onQueryError);

若要下载示例,请参阅 SharePoint MVP Corey Roth 发布的以下代码示例:SharePoint:通过托管客户端对象模型查询搜索

使用 REST 服务查询

SharePoint 包括 REST 服务,使用该服务,您能够通过任何支持 REST Web 请求的技术从客户端应用程序对 SharePoint Search 服务执行查询。 搜索 REST 服务公开两个端点: querysuggest,并将支持 GETPOST 操作。 相关结果以 XML 或 JavaScript 对象表示法 (JSON) 格式返回。

以下是服务的接入点: https://{site_url}/_api/search/ 使用根站点作为查询入口点。 还可以在 URL 中指定另一个站点,如下所示: https://{site_url}/site/_api/search/。 之前的 /_api/search/ URL 前缀将使用在该站点/范围中定义的默认结果源,查询规则也将与使用的 URL 上下文相关,除非使用参数来替代此行为。 除非在站点上进行了任何特定的搜索配置,否则两种方式访问服务的结果都是相同的。

有关详细信息,请参阅 SharePoint Search REST API 概述使用搜索 REST 服务检索查询建议

使用 .NET 服务器对象模型查询

使用服务器对象模型的应用必须直接在运行 SharePoint 的服务器上运行。 搜索查询服务器对象模型驻留在 Microsoft.Office.Server.Search.Query 命名空间中,该命名空间位于 Microsoft.Office.Server.Search.dll。

与在 SharePoint Server 2010 中一样,使用 KeywordQuery 类定义查询,然后调用 Execute () 方法来提交查询。 在 SharePoint 中, Execute 方法已过时,尽管该方法仍然有效,但您也应该使用 SearchExecutor 类来代替。 若要提交查询,请调用 ExecuteQuery() 方法,在调用过程中传递 KeywordQuery 类的实例。

以下是一个基本示例。

using (SPSite siteCollection = new SPSite("<serverRelativeUrl>"))
{
  KeywordQuery keywordQuery = new KeywordQuery(siteCollection);
  keywordQuery.QueryText = "SharePoint";
  SearchExecutor searchExecutor = new SearchExecutor();
  ResultTableCollection resultTableCollection = searchExecutor.ExecuteQuery(keywordQuery);
  resultTableCollection = resultTableCollection.Filter("TableType", KnownTableTypes.RelevantResults);
  ResultTable resultTable = resultTableCollection.FirstOrDefault();
  DataTable dataTable = resultTable.Table;
}

若要下载示例,请参阅 SharePoint MVP Corey Roth 发布的以下代码示例:SharePoint:通过托管客户端对象模型查询搜索

另请参阅