Compartir a través de


Ordenar los resultados de la búsqueda con IDirectorySearch

De forma predeterminada, los resultados de una búsqueda se devuelven en ningún orden garantizado. La ADS_SEARCHPREF_SORT_ON preferencia indica al servidor que ordene el conjunto de resultados en un valor de atributo especificado antes de que se devuelva al cliente.

Se recomienda usar atributos indexados para la ordenación. De lo contrario, el servidor debe recuperar el conjunto de resultados completo y ordenarlo antes de enviar los resultados al cliente. Esto también se aplica a las búsquedas paginadas. Tenga en cuenta que el rendimiento de una búsqueda ordenada aumentará si el filtro incluye un atributo indexado y ese atributo se especifica como clave de ordenación; en este caso, Active Directory puede satisfacer la ordenación mientras procesa el filtro. Por ejemplo, una consulta de ordenación eficaz para un conjunto de usuarios podría tener un filtro incluido (sn>smith) y una clave de ordenación de sn.

La ordenación del lado servidor con la opción de búsqueda ADS_SEARCHPREF_SORT_ON reducirá el rendimiento del servidor. Si va a realizar muchas búsquedas, considere la posibilidad de ordenar los resultados manualmente en el lado cliente para reducir la carga de trabajo en el servidor.

De forma predeterminada, la ordenación de resultados está deshabilitada. Para habilitar la ordenación de resultados, establezca una opción de búsqueda de ADS_SEARCHPREF_SORT_ON con un ADSTYPE_PROV_SPECIFIC que apunte a una estructura de ADS_SORTKEY en la matriz ADS_SEARCHPREF_INFO pasada al método IDirectorySearch::SetSearchPreference . La estructura ADS_SORTKEY se usa para especificar el atributo en el que se va a ordenar y el orden de la ordenación.

En el ejemplo de código siguiente se muestra cómo habilitar la ordenación de resultados.

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 no admite la ordenación en atributos construidos, por lo que no es posible especificar un atributo construido para la ordenación. El atributo distinguishedName tampoco se puede usar para la ordenación. Active Directory tampoco permite la ordenación en más de un atributo, por lo que la opción de búsqueda ADS_SEARCHPREF_SORT_ON solo puede contener una estructura ADS_SORTKEY .