Sortieren der Suchergebnisse mit IDirectorySearch

Standardmäßig werden die Ergebnisse einer Suche in keiner garantierten Reihenfolge zurückgegeben. Die EINSTELLUNG ADS _ SEARCHPREF _ SORT _ ON weist den Server an, das Ergebnisset nach einem angegebenen Attributwert zu sortieren, bevor es an den Client zurückgegeben wird.

Es wird empfohlen, indizierte Attribute für die Sortierung zu verwenden. Andernfalls muss der Server das vollständige Resultseset abrufen und sortieren, bevor Ergebnisse an den Client gesendet werden. Dies gilt auch für seitenseitige Suchvorgänge. Beachten Sie, dass die Leistung einer sortierten Suche erhöht wird, wenn der Filter ein indiziertes Attribut enthält und dieses Attribut als Sortierschlüssel angegeben wird. In diesem Fall kann Active Directory die Sortierung erfüllen, während der Filter verarbeitet wird. Beispielsweise kann eine effiziente Sortierabfrage für eine Gruppe von Benutzern einen Filter enthalten, der (sn>smith) und einen Sortierschlüssel von sn enthält.

Die serverseitige Sortierung mit der Suchoption ADS _ SEARCHPREF _ SORT _ ON verringert die Leistung des Servers. Wenn Sie viele Suchvorgänge durchführen, sollten Sie die Ergebnisse auf Clientseite manuell sortieren, um die Arbeitsauslastung auf dem Server zu reduzieren.

Standardmäßig ist die Ergebnissortierung deaktiviert. Legen Sie zum Aktivieren der Ergebnissortierung eine SUCHoption ADS _ SEARCHPREF _ SORT _ ON mit einer ADSTYPE _ PROV _ SPECIFIC fest, die auf eine ADS _ SORTKEY-Struktur im ADS _ SEARCHPREF _ INFO-Array verweist, das an die IDirectorySearch::SetSearchPreference-Methode übergeben wird. Die ADS _ SORTKEY-Struktur wird verwendet, um das Zu sortierende Attribut und die Reihenfolge der Sortierung anzugeben.

Das folgende Codebeispiel zeigt, wie die Ergebnissortierung aktiviert wird.

ADS_SORTKEY SortKey;
SortKey.pszAttrType = L"cn";
SortKey.pszReserved = NULL;
SortKey.fReverseorder = FALSE;

ADS_SEARCHPREF_INFO SearchPref;
SearchPref.dwSearchPref = ADS_SEARCHPREF_SORT_ON;
SearchPref.vValue.dwType = ADSTYPE_PROV_SPECIFIC;
SearchPref.vValue.ProviderSpecific.dwLength = sizeof(SortKey);
SearchPref.vValue.ProviderSpecific.lpValue = (LPBYTE)&SortKey;

Active Directory unterstützt keine Sortierung nach konstruierten Attributen, daher ist es nicht möglich, ein konstruiertes Attribut für die Sortierung anzugeben. Das distinguishedName-Attribut kann auch nicht zum Sortieren verwendet werden. Active Directory lässt auch keine Sortierung nach mehr als einem Attribut zu, sodass die SUCHoption ADS _ SEARCHPREF _ SORT _ ON nur eine ADS _ SORTKEY-Struktur enthalten kann.