Verwenden der Microsoft Search-API zum Verfeinern von Abfragen mit Aggregationen
Sie können die Microsoft Search-API in Microsoft Graph verwenden, um Suchergebnisse zu verfeinern und deren Verteilung im Index anzuzeigen.
Um die Ergebnisse zu verfeinern, geben Sie in der Suchanforderung die AggregationOption an. Each aggregationOption specifies the property on which the aggregation should be computed and the number of searchBucket items to be returned in the response.
Beispiel 1: Anfordern von Aggregationen nach Zeichenfolgenfeldern
Im folgenden Beispiel werden listItem-Ressourcen durchsucht und Ergebnisse nach Dateityp, Inhaltsklasse und Uhrzeit der letzten Änderung aggregiert, wobei es sich um Zeichenfolgenwerte handelt.
Die Antwort enthält zwei searchBucket-Objekte für die beiden Aggregationen:
- Die Schlüsseleigenschaft gibt den tatsächlichen Wert (durch
fileType
,contentclass
oderlastModifiedTime
) für die übereinstimmenden listItem-Objekte an, die durch diesen Wert im selben Bucket aggregiert werden. - Die Count-Eigenschaft gibt die Anzahl solcher Objekte an, die im selben Bucket aggregiert werden. Beachten Sie, dass diese Zahl eine Annäherung an die Anzahl der Übereinstimmungen darstellt und keine genaue Anzahl von Übereinstimmungen liefert.
- Buckets von Ergebnissen, die nach Dateityp aggregiert werden, werden nach Anzahl in absteigender Reihenfolge sortiert. In diesem Beispiel gibt es 3 Buckets für 3 Dateitypen:
docx
,xlsx
undpptx
. - Buckets von Ergebnissen, die von der Inhaltsklasse aggregiert werden, werden nach dem Zeichenfolgenwert der Inhaltsklasse in absteigender Reihenfolge sortiert. In diesem Beispiel gibt es nur einen Bucket mit allen übereinstimmenden Objekten, die dieselbe Inhaltsklasse verwenden:
STS_ListItem_DocumentLibrary
. - Buckets von Ergebnissen, die von lastModifiedTime aggregiert werden, werden nach dem Zeichenfolgenwert von lastModifiedTime in absteigender Reihenfolge sortiert. Dieses Beispiel enthält drei Buckets:
Before 2021-09-01T09:08:19.6224752Z
,From 2021-09-01T09:08:19.6224752Z up to 2021-11-09T09:08:19.6224752Z
und2021-11-09T09:08:19.6224752Z or later
.
Anforderung
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"
}
]
}
}
]
}
]
}
Antwort
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\")"
}
]
}
]
}
]
}
Beispiel 2: Anwenden eines Aggregationsfilters basierend auf einer vorherigen Anforderung
In diesem Beispiel wird ein Aggregationsfilter angewendet, der auf dem aggregationFilterToken basiert, das als fileType
Feld und From 2021-09-01T09:08:19.6224752Z up to 2021-11-09T09:08:19.6224752Z
als lastModifiedTime
Feld in Beispiel 1 zurückgegeben wirddocx
.
Der der AggregationFilters-Eigenschaft zugewiesene Zeichenfolgenwert folgt dem Format "{field}:\"{aggregationFilterToken}\"." Wenn mehrere Werte für denselben Filter erforderlich sind, sollte der der AggregationFilters-Eigenschaft zugewiesene Zeichenfolgenwert folgendermaßen formatieren: "{field}:or(\"{aggregationFilterToken1}\",\"{aggregationFilterToken2}\")".
Der der AggregationFilters-Eigenschaft zugewiesene Datums-/Uhrzeitformatierungszeichenfolgenwert folgt dem Format "{field}:{aggregationFilterToken}".
Anforderung
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)"
]
}
]
}
Antwort
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\")"
}
]
}
]
}
]
}
Beispiel 3: Anfordern der Aggregation nach einem numerischen Feld
Im folgenden Beispiel werden driveItem-Ressourcen durchsucht und die Ergebnisse anhand ihrer Größe aggregiert, bei der es sich um einen numerischen Wert handelt. Die Anforderung gibt die Aggregation nach drei Größenbereichen an:
- Größe kleiner als 100
- Größe zwischen 100 und 1000
- Größe 1000 und höher
Die Antwort enthält 3 searchBucket-Objekte , eines für jede Größenbereichaggregation:
- Die 2 Buckets der bereiche niedrigeren Größe enthalten keine Suchabstimmungen.
- Alle 9 Suchabgleichsvorgänge haben größen 1000 oder höher.
Anforderung
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"
}
]
}
}
]
}
]
}
Antwort
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\")"
}
]
}
]
}
]
}
Bekannte Einschränkungen
Aggregationen werden nur für SharePoint- oder OneDrive-Elemente unterstützt. Sie werden für Nachrichten oder Ereignisse nicht unterstützt.
Nächste Schritte
Feedback
Feedback senden und anzeigen für