コンテナーとファイルを検索する

適用対象: 開発者

アプリで SharePoint Embedded コンテナーまたはコンテンツ間キーワード (keyword)検索する必要がある場合は、Microsoft Graph で Microsoft Search を使用します。 検索 API は、一致する結果をランク付けし、コンテナーのリソース drive 、またはファイルとフォルダーのリソース driveItem を返します。

注:

SharePoint Embedded 検索はプレビュー段階であり、Microsoft Graph /beta エンドポイントでのみ使用できます。コンテナーの v1.0 検索 API はありません。 Search では、委任されたアクセス許可のみがサポートされ、 例外的なアクセス パターンに従います。

検索範囲を選択する

すべての要求を、アプリに属するコンテナーの種類またはコンテナーにスコープを設定します。 検索はサインインしているユーザーのコンテキストで実行されるため、サービスはユーザーがアクセスできるコンテンツに結果をトリミングします。 返されたコンテナーまたはファイルを開く前に、アプリが対応するコンテナーの種類にアクセスできる必要もあります。

queryStringで次の管理プロパティを使用します。

範囲 エンティティの種類 クエリ パターン
型のすべてのコンテナー drive ContainerTypeId:{containerTypeId}
タイトルごとに 1 つのコンテナー drive Title:'contoso' AND ContainerTypeId:{containerTypeId}
説明による 1 つのコンテナー drive Description:'Everything' AND ContainerTypeId:{containerTypeId}
1 つのコンテナー内のFiles driveItem Title:'contoso' AND ContainerId:{containerId}
コンテナーの種類間でのFiles driveItem 'contoso' AND ContainerTypeId:{containerTypeId}

アプリケーションが Microsoft 365 コンテンツの検出可能性をオプトアウトした場合は、 sharePointOneDriveOptions.includeHiddenContent を要求本文の true に設定します。

コンテナーの検索

POST要求を Microsoft Graph 検索に送信し、リソースdrive要求します。

POST https://graph.microsoft.com/beta/search/query
Content-Type: application/json
{
  "requests": [
    {
      "entityTypes": ["drive"],
      "query": {
        "queryString": "ContainerTypeId:498c6855-8f0e-0de7-142e-4e9ff86af9ae"
      },
      "sharePointOneDriveOptions": {
        "includeHiddenContent": true
      },
      "from": 0,
      "size": 25
    }
  ]
}

応答には hitsContainersが含まれます。 各ヒットには、hitIdranksummary@odata.type#microsoft.graph.driveするresourceが含まれます。

ファイルとフォルダーを検索する

ユーザーがファイル名またはファイル コンテンツを検索するときに、 driveItem リソースを要求します。 ユーザーがワークスペース内に既に存在する場合に ContainerId を持つ特定のコンテナーへのスコープ。

{
  "requests": [
    {
      "entityTypes": ["driveItem"],
      "query": {
        "queryString": "Title:'contoso' AND ContainerId:b!UBoDBcfpTEeInnz0Rlmlsp6EC-DsPN5Kj3uW0fD1mPp9ptYmB71GRpxbhbDlGdb0"
      },
      "sharePointOneDriveOptions": {
        "includeHiddenContent": true
      },
      "from": 0,
      "size": 25
    }
  ]
}

driveItem結果には、idnamesizecreatedDateTimelastModifiedDateTimeparentReferencecreatedBylastModifiedBywebUrlなどのファイル メタデータを含めることができます。

選択したフィールドを返し、結果を並べ替える

応答で特定の管理プロパティを要求するには、 fields コレクションを使用します。 並べ替え可能なプロパティでのみ sortProperties を使用します。

{
  "requests": [
    {
      "entityTypes": ["driveItem"],
      "query": { "queryString": "Everything about contoso" },
      "sharePointOneDriveOptions": { "includeHiddenContent": true },
      "fields": ["SampleOWSText", "id", "name", "parentReference", "webUrl", "createdDateTime", "lastModifiedDateTime", "size"],
      "sortProperties": [
        { "name": "Created", "isDescending": false }
      ]
    }
  ]
}

fromsizeを使用して、ランク付けされた結果をページングします。 hitsContainers[].totalhitsContainers[].moreResultsAvailableを読んで、別のページを要求するかどうかを決定します。

カスタム プロパティの検索

コンテナーのカスタム プロパティの場合は、クエリ文字列のカスタム プロパティ名に OWSTEXT を追加します。

customPropertyNametOWSTEXT:customPropertyValue AND ContainerTypeId:498c6855-8f0e-0de7-142e-4e9ff86af9ae

ユーザーがフリーテキスト用語を入力し、コンテナー間で関連性のランク付けを行う場合は、フルテキスト 検索 (上記の /beta/search/query エンドポイント) を使用します。 アプリで関連性のランク付けなしで既知のメタデータ値をフィルター処理する必要がある場合は、検索の代わりに直接列挙を使用します。 たとえば、 $filter$expand$orderbyを使用してドライブ項目を照会します。

GET https://graph.microsoft.com/v1.0/drives/{container-id}/items?$filter=startswith(listitem/fields/{column}, '{value}')&$expand=listitem($expand=fields)

コンテナーに 5,000 を超える項目があり、 $orderbyで列挙する場合は、大きな順序付けされた列挙に必要な Prefer: HonorNonIndexedQueriesWarningMayFailRandomly ヘッダーを含めます。

既知の制限

Search では、アプリの承認ではなく、サインインしているユーザーのアクセス権が適用されます。 結果には、クエリに一致するユーザーがアクセスできるすべてのコンテナーとアイテムが含まれます。コンテナーの種類がアプリで使用が承認されていないコンテナーも含まれます。 queryStringContainerTypeIdを常に含め、結果をアプリにスコープします。

検索によって返されるコンテナーまたはファイルを開くには、対応するコンテナーの種類に対するアクセス許可がアプリに必要です。

次の手順