了解 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 服务器扩展\15\TEMPLATE\LAYOUTS\ClientBin |
| JavaScript CSOM |
SP.search.js %ProgramFiles%\Common Files\Microsoft Shared\Web 服务器扩展\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 服务公开两个端点: query 和 suggest,并将支持 GET 和 POST 操作。 相关结果以 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.dll Microsoft.Office.Server.Search.Query 命名空间中。
与 SharePoint 服务器 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:通过托管客户端对象模型查询搜索。