SharePoint 検索クエリ API を使用する

SharePoint で提供されるクエリ API について説明します。クエリ API を使用すると検索機能をカスタム ソリューションやカスタム アプリケーションに追加することができます。

SharePoint クエリ API

SharePoint の検索 では、さまざまなクエリ API が利用でき、さまざまな方法で検索結果にアクセスすることができます。そのため、さまざまなカスタム ソリューション タイプで検索結果を返すことができます。

以前のバージョンの SharePoint で提供されていたサーバー オブジェクト モデルに加え、SharePoint の検索 では以下も利用できます。

  • クライアント オブジェクト モデル (CSOM)
  • JavaScript オブジェクト モデル (JSOM)
  • REST (Representational State Transfer) サービス

表 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 および CSOM へのエントリ ポイントとなる ClientContext クラスの詳細については、「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 Web 要求をサポートする任意の技術を使用して、クライアント アプリケーションから SharePoint 検索サービスに対するクエリをリモートで実行できる REST サービスが含まれます。 この検索 REST サービスでは 2 つのエンドポイント ( querysuggest) が公開され、 GET および POST 操作の両方がサポートされます。 結果は XML または JavaScript Object Notation (JSON) 形式のどちらかで返されます。

サービスのアクセス ポイントを次に示します。 https://{site_url}/_api/search/ クエリ エントリ ポイントとしてルート サイトを使用します。 URL には、次のように https://{site_url}/site/_api/search/別のサイトを指定することもできます。 以前 /_api/search/ の URL プレフィックスは、そのサイト/スコープで定義されている既定の結果ソースを使用し、クエリ ルールも、この動作をオーバーライドするためにパラメーターを使用しない限り、使用される URL にコンテキスト化されます。 サイトで特定の検索構成を行う場合を除き、サービスにアクセスする両方の方法で結果は同じです。

詳細については、「SharePoint 検索 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 クラスのインスタンスを渡します。

以下に基本的な例を示します。

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: マネージ クライアント オブジェクト モデルを使用したクエリ検索を参照してください。

関連項目