Сортировка результатов поиска с помощью IDirectorySearch
По умолчанию результаты поиска возвращаются без гарантированного порядка. Параметр ADS_SEARCHPREF_SORT_ON указывает серверу сортировать результирующий набор по указанному значению атрибута перед возвратом клиенту.
Рекомендуется использовать индексированные атрибуты для сортировки. В противном случае сервер должен получить полный результирующий набор и сортировать его перед отправкой результатов клиенту. Это также относится к поиску на страницах. Помните, что производительность отсортированного поиска будет увеличена, если фильтр включает индексированный атрибут и этот атрибут указывается в качестве ключа сортировки; В этом случае Active Directory может удовлетворить сортировку при обработке фильтра. Например, эффективный запрос сортировки для набора пользователей может иметь фильтр, который включал (sn>smith) и ключ сортировки sn.
Сортировка на стороне сервера с помощью параметра поиска ADS_SEARCHPREF_SORT_ON снизит производительность сервера. Если вы будете выполнять много поисковых запросов, рассмотрите возможность сортировки результатов вручную на стороне клиента, чтобы уменьшить рабочую нагрузку на сервере.
По умолчанию сортировка результатов отключена. Чтобы включить сортировку результатов, задайте параметр поиска ADS_SEARCHPREF_SORT_ON с ADSTYPE_PROV_SPECIFIC, указывающим на структуру ADS_SORTKEY в массиве ADS_SEARCHPREF_INFO, переданной методу IDirectorySearch::SetSearchPreference. Структура ADS_SORTKEY используется для указания атрибута для сортировки и порядка сортировки.
В следующем примере кода показано, как включить сортировку результатов.
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 не поддерживает сортировку по созданным атрибутам, поэтому невозможно указать созданный атрибут для сортировки. Атрибут различающегося имени также не может использоваться для сортировки. Active Directory также не разрешает сортировку по нескольким атрибутам, поэтому параметр поиска ADS_SEARCHPREF_SORT_ON может содержать только одну ADS_SORTKEY структуру.