Microsoft Search API を使用して集計を使用してクエリを絞り込む
Microsoft Graph の Microsoft Search API を使用すると、検索結果を絞り込み、その分布をインデックスに表示できます。
結果を絞り込むには、 検索要求で aggregationOption を指定します。 各 aggregationOption は、集計を計算するプロパティと、応答で返される searchBucket 項目の数を指定します。
例 1: 文字列フィールドによる集計を要求する
次の例では 、listItem リソースを検索し、そのファイルの種類、コンテンツ クラス、最終変更時刻 (いずれも文字列値) で結果を集計します。
応答には、2 つの集計の 2 つの searchBucket オブジェクトが含まれています。
-
key プロパティは、その値によって
fileType
同じバケットに集計される、一致する listItem オブジェクトの実際の値 (、、contentclass
またはlastModifiedTime
) を指定します。 - count プロパティは、同じバケットに集計されたこのようなオブジェクトの数を指定します。 この数は一致数の近似値であり、一致の正確な数は提供されません。
- ファイルの種類によって集計された結果のバケットは、count で降順に並べ替えられます。 この例では、3 つのファイルの種類
docx
(、xlsx
、) に対してpptx
3 つのバケットがあります。 - コンテンツ クラスによって集計された結果のバケットは、コンテンツ クラスの文字列値によって降順で並べ替えられます。 この例では、一致するすべてのオブジェクトが同じコンテンツ クラス
STS_ListItem_DocumentLibrary
を共有するバケットは 1 つだけです。 - lastModifiedTime によって集計された結果のバケットは、lastModifiedTime の文字列値によって降順で並べ替えられます。 この例には、および の
Before 2021-09-01T09:08:19.6224752Z
From 2021-09-01T09:08:19.6224752Z up to 2021-11-09T09:08:19.6224752Z
3 つのバケットが2021-11-09T09:08:19.6224752Z or later
含まれています。
要求
POST https://graph.microsoft.com/beta/search/query
Content-Type: application/json
{
"requests": [
{
"entityTypes": [
"listItem"
],
"query": {
"queryString": "test"
},
"from": 0,
"size": 25,
"aggregations": [
{
"field": "fileType",
"size": 20,
"bucketDefinition": {
"sortBy": "count",
"isDescending": "true",
"minimumCount": 0
}
},
{
"field": "contentclass",
"size": 15,
"bucketDefinition": {
"sortBy": "keyAsString",
"isDescending": "true",
"minimumCount": 0
}
},
{
"field": "lastModifiedTime",
"size": 2,
"bucketDefinition": {
"sortBy": "KeyAsString",
"isDescending": "true",
"minimumCount": 0,
"ranges": [
{
"to": "2021-09-01T09:08:19.6224752Z"
},
{
"from": "2021-09-01T09:08:19.6224752Z",
"to": "2021-11-09T09:08:19.6224752Z"
},
{
"from": "2021-11-09T09:08:19.6224752Z"
}
]
}
}
]
}
]
}
応答
HTTP/1.1 200 OK
Content-type: application/json
{
"@odata.type": "#microsoft.graph.searchResponse",
"hitsContainers": [
{
"@odata.type": "#microsoft.graph.searchHitsContainer",
"hits": [
"..."
],
"total": 9,
"moreResultsAvailable": false,
"aggregations": [
{
"@odata.type": "#microsoft.substrateSearch.searchAggregation",
"field": "fileType",
"buckets": [
{
"@odata.type": "#microsoft.substrateSearch.searchBucket",
"key": "docx",
"count": 5,
"aggregationFilterToken": "\"ǂǂ646f6378\""
},
{
"@odata.type": "#microsoft.substrateSearch.searchBucket",
"key": "xlsx",
"count": 3,
"aggregationFilterToken": "\"ǂǂ786c7378\""
},
{
"@odata.type": "#microsoft.substrateSearch.searchBucket",
"key": "pptx",
"count": 1,
"aggregationFilterToken": "\"ǂǂ70707478\""
}
]
},
{
"@odata.type": "#microsoft.substrateSearch.searchAggregation",
"field": "contentclass",
"buckets": [
{
"@odata.type": "#microsoft.substrateSearch.searchBucket",
"key": "STS_ListItem_DocumentLibrary",
"count": 9,
"aggregationFilterToken": "\"ǂǂ5354535f4c6973744974656d5f446f63756d656e744c696272617279\""
}
]
},
{
"@odata.type": "#microsoft.substrateSearch.searchAggregation",
"field": "lastModifiedTime",
"buckets": [
{
"key": "Before 2021-09-01T09:08:19.6224752Z",
"count": 5,
"aggregationFilterToken": "range(min, 2021-09-01T09:08:19.6224752Z)"
},
{
"key": "From 2021-09-01T09:08:19.6224752Z up to 2021-11-09T09:08:19.6224752Z",
"count": 3,
"aggregationFilterToken": "range(2021-09-01T09:08:19.6224752Z, 2021-11-09T09:08:19.6224752Z)"
},
{
"key": "2021-11-09T09:08:19.6224752Z or later",
"count": 1,
"aggregationFilterToken": "range(2021-11-09T09:08:19.6224752Z, max, to=\"le\")"
}
]
}
]
}
]
}
例 2: 前の要求に基づいて集計フィルターを適用する
次の使用例は、例 1 のフィールドとして、および From 2021-09-01T09:08:19.6224752Z up to 2021-11-09T09:08:19.6224752Z
フィールドとして fileType
に返される docx
aggregationFilterToken に基づく集計フィルターをlastModifiedTime
適用します。
aggregationFilters プロパティに割り当てられた文字列値は、"{field}:\"{aggregationFilterToken}\"" という形式に従います。 同じフィルターに複数の値が必要な場合は、 aggregationFilters プロパティに割り当てられた文字列値は 、"{field}:or(\"{aggregationFilterToken1}\",\"{aggregationFilterToken2}\")" の形式に従う必要があります。
aggregationFilters プロパティに割り当てられた datetime 形式の文字列値は、"{field}:{aggregationFilterToken}" の形式に従います。
要求
POST https://graph.microsoft.com/beta/search/query
Content-Type: application/json
{
"requests": [
{
"entityTypes": [
"driveItem"
],
"query": {
"queryString": "test"
},
"from": 0,
"size": 20,
"aggregations": [
{
"field": "fileType",
"size": 10,
"bucketDefinition": {
"sortBy": "count",
"isDescending": "true",
"minimumCount": 0
}
}
],
"aggregationFilters": [
"fileType:\"ǂǂ68746d6c\"",
"lastModifiedTime:range(2021-09-01T09:08:19.6224752Z, 2021-11-09T09:08:19.6224752Z)"
]
}
]
}
応答
HTTP/1.1 200 OK
Content-type: application/json
{
"@odata.type": "#microsoft.graph.searchResponse",
"hitsContainers": [
{
"@odata.type": "#microsoft.graph.searchHitsContainer",
"hits": [
"..."
],
"total": 69960,
"moreResultsAvailable": true,
"aggregations": [
{
"@odata.type": "#microsoft.substrateSearch.searchAggregation",
"field": "fileType",
"buckets": [
{
"@odata.type": "#microsoft.substrateSearch.searchBucket",
"key": "html",
"count": 69960,
"aggregationFilterToken": "\"ǂǂ68746d6c\""
}
]
},
{
"@odata.type": "#microsoft.substrateSearch.searchAggregation",
"field": "lastModifiedTime",
"buckets": [
{
"key": "Before 2021-09-01T09:08:19.6224752Z",
"count": 0,
"aggregationFilterToken": "range(min, 2021-09-01T09:08:19.6224752Z)"
},
{
"key": "From 2021-09-01T09:08:19.6224752Z up to 2021-11-09T09:08:19.6224752Z",
"count": 69960,
"aggregationFilterToken": "range(2021-09-01T09:08:19.6224752Z, 2021-11-09T09:08:19.6224752Z)"
},
{
"key": "2021-11-09T09:08:19.6224752Z or later",
"count": 0,
"aggregationFilterToken": "range(2021-11-09T09:08:19.6224752Z, max, to=\"le\")"
}
]
}
]
}
]
}
例 3: 数値フィールドによる集計を要求する
次の例では 、driveItem リソースを検索し、数値のサイズで結果を集計します。 要求では、3 つのサイズ範囲による集計を指定します。
- サイズが 100 未満
- 100 から 1000 までのサイズ
- サイズ 1000 以上
応答には、サイズ範囲の集計ごとに 1 つずつ、3 つの searchBucket オブジェクトが含まれています。
- サイズが小さい範囲の 2 つのバケットには、検索の一致は含まれません。
- 9 つの検索の一致はすべて、サイズが 1000 以上です。
要求
POST https://graph.microsoft.com/beta/search/query
Content-Type: application/json
{
"requests": [
{
"entityTypes": [
"driveItem"
],
"query": {
"queryString": "test"
},
"from": 0,
"size": 10,
"aggregations": [
{
"field": "Size",
"size": 5,
"bucketDefinition": {
"sortBy": "keyAsNumber",
"isDescending": "true",
"minimumCount": 0,
"ranges": [
{
"to": "100"
},
{
"from": "100",
"to": "1000"
},
{
"from": "1000"
}
]
}
}
]
}
]
}
応答
HTTP/1.1 200 OK
Content-type: application/json
{
"@odata.type": "#microsoft.graph.searchResponse",
"hitsContainers": [
{
"@odata.type": "#microsoft.graph.searchHitsContainer",
"hits": [
"..."
],
"total": 9,
"moreResultsAvailable": false,
"aggregations": [
{
"@odata.type": "#microsoft.substrateSearch.searchAggregation",
"field": "Size",
"buckets": [
{
"@odata.type": "#microsoft.substrateSearch.searchBucket",
"key": "Less than 100",
"count": 0,
"aggregationFilterToken": "range(min, 100)"
},
{
"@odata.type": "#microsoft.substrateSearch.searchBucket",
"key": "100 up to 1000",
"count": 0,
"aggregationFilterToken": "range(100, 1000)"
},
{
"@odata.type": "#microsoft.substrateSearch.searchBucket",
"key": "1000 and up",
"count": 9,
"aggregationFilterToken": "range(1000, max, to=\"le\")"
}
]
}
]
}
]
}
既知の制限
集計は、SharePoint、OneDrive、または外部アイテムでのみサポートされます。 メッセージまたはイベントの種類ではサポートされていません。