Partager via


Tri des résultats de la recherche avec IDirectorySearch

Par défaut, les résultats d’une recherche ne sont retournés dans aucun ordre garanti. La préférence ADS_SEARCHPREF_SORT_ON indique au serveur de trier le jeu de résultats sur une valeur d’attribut spécifiée avant qu’il ne soit retourné au client.

Il est recommandé d’utiliser des attributs indexés pour le tri. Sinon, le serveur doit récupérer le jeu de résultats complet et le trier avant d’envoyer des résultats au client. Cela s’applique également aux recherches paginées. N’oubliez pas que les performances d’une recherche triée seront améliorées si le filtre inclut un attribut indexé et que cet attribut est spécifié comme clé de tri ; dans ce cas, Active Directory peut satisfaire le tri lors du traitement du filtre. Par exemple, une requête de tri efficace pour un ensemble d’utilisateurs peut avoir un filtre qui inclut (sn>smith) et une clé de tri de sn.

Le tri côté serveur avec l’option de recherche ADS_SEARCHPREF_SORT_ON réduit les performances du serveur. Si vous effectuez de nombreuses recherches, envisagez de trier les résultats manuellement côté client pour réduire la charge de travail sur le serveur.

Par défaut, le tri des résultats est désactivé. Pour activer le tri des résultats, définissez une option de recherche ADS_SEARCHPREF_SORT_ON avec un ADSTYPE_PROV_SPECIFIC qui pointe vers une structure de ADS_SORTKEY dans le tableau ADS_SEARCHPREF_INFO passé à la méthode IDirectorySearch::SetSearchPreference . La structure ADS_SORTKEY est utilisée pour spécifier l’attribut sur lequel trier et l’ordre du tri.

L’exemple de code suivant montre comment activer le tri des résultats.

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 ne prend pas en charge le tri sur les attributs construits. Il n’est donc pas possible de spécifier un attribut construit pour le tri. L’attribut distinguishedName ne peut pas non plus être utilisé pour le tri. Active Directory n’autorise pas non plus le tri sur plusieurs attributs, de sorte que l’option de recherche ADS_SEARCHPREF_SORT_ON ne peut contenir qu’une seule structure ADS_SORTKEY .