Sortieren der Suchergebnisse mit IDirectorySearch

Standardmäßig werden die Ergebnisse einer Suche in keiner garantierten Reihenfolge zurückgegeben. Die ADS_SEARCHPREF_SORT_ON-Einstellung weist den Server an, das Resultset 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 Resultset 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 während der Verarbeitung des Filters erfüllen. Beispielsweise könnte 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 ADS_SEARCHPREF_SORT_ON Suchoption verringert die Leistung des Servers. Wenn Sie viele Suchvorgänge ausführen, sollten Sie die Ergebnisse manuell auf der Clientseite sortieren, um die Workload auf dem Server zu reduzieren.

Standardmäßig ist die Ergebnissortierung deaktiviert. Um die Ergebnissortierung zu aktivieren, legen Sie eine ADS_SEARCHPREF_SORT_ON Suchoption 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 Sie die Ergebnissortierung aktivieren.

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 die Sortierung nach konstruierten Attributen nicht, sodass es nicht möglich ist, ein konstruiertes Attribut für die Sortierung anzugeben. Das distinguishedName-Attribut kann auch nicht für die Sortierung verwendet werden. Active Directory lässt auch keine Sortierung nach mehr als einem Attribut zu, sodass die ADS_SEARCHPREF_SORT_ON Suchoption nur eine ADS_SORTKEY Struktur enthalten kann.