使用 SharePoint 搜索查询 API

浏览 : 561 次 Fri, 01 Apr 2022 06:01:17 GMT

了解 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 以及何时使用这些 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.Search.Client.dll 中 Microsoft.SharePoint.Search.Client.Query 命名空间中的对象模型。

以下是一个基本示例。

C#
/sites/"))
{
  KeywordQuery keywordQuery = new KeywordQuery(clientContext);
  keywordQuery.QueryText = "SharePoint";
  SearchExecutor searchExecutor = new SearchExecutor(clientContext);
  ClientResult results = searchExecutor.ExecuteQuery(keywordQuery);
  clientContext.ExecuteQuery();
}
" style="box-sizing: inherit; font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, Courier, monospace; font-size: 1em; direction: ltr; outline-color: inherit; line-height: 1.3571; border: 0px; display: block; padding: 0px; position: relative;">using (ClientContext clientContext = new ClientContext("http:///sites/"))
{
  KeywordQuery keywordQuery = new KeywordQuery(clientContext);
  keywordQuery.QueryText = "SharePoint";
  SearchExecutor searchExecutor = new SearchExecutor(clientContext);
  ClientResult results = searchExecutor.ExecuteQuery(keywordQuery);
  clientContext.ExecuteQuery();
}

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

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

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

以下是一个基本示例。

C#
");
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);
" style="box-sizing: inherit; font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, Courier, monospace; font-size: 1em; direction: ltr; outline-color: inherit; line-height: 1.3571; border: 0px; display: block; padding: 0px; position: relative;">var clientContext = new SP.ClientContext("");
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/。搜索服务从整个网站集返回结果,因此,通过这两种方法访问服务都将返回相同的结果。

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

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

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

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

以下是一个基本示例。

C#
"))
{
  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;
}
" style="box-sizing: inherit; font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, Courier, monospace; font-size: 1em; direction: ltr; outline-color: inherit; line-height: 1.3571; border: 0px; display: block; padding: 0px; position: relative;">using (SPSite siteCollection = new SPSite(""))
{
  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:通过托管客户端对象模型查询搜索

 

使用 SharePoint 搜索查询 API
https://docs.microsoft.com/zh-cn/sharepoint/dev/general-development/using-the-sharepoint-search-query-apis