IDirectorySearch를 사용하여 검색 결과 정렬

기본적으로 검색 결과는 보장되지 않는 순서로 반환됩니다. ADS_SEARCHPREF_SORT_ON 기본 설정은 클라이언트에 반환되기 전에 지정된 특성 값에 대한 결과 집합을 정렬하도록 서버에 지시합니다.

인덱싱된 특성을 정렬에 사용하는 것이 좋습니다. 그렇지 않으면 서버는 전체 결과 집합을 검색하고 클라이언트에 결과를 보내기 전에 정렬해야 합니다. 이는 페이징된 검색에도 적용됩니다. 필터에 인덱싱된 특성이 포함되어 있고 해당 특성이 정렬 키로 지정된 경우 정렬된 검색의 성능이 향상됩니다. 이 경우 Active Directory는 필터를 처리하는 동안 정렬을 충족할 수 있습니다. 예를 들어 사용자 집합에 대한 효율적인 정렬 쿼리에는 (sn smith)가 포함된 필터와 sn>의 정렬 키가 있을 수 있습니다.

ADS_SEARCHPREF_SORT_ON 검색 옵션을 사용하여 서버 쪽을 정렬하면 서버 성능이 저하됩니다. 많은 검색을 수행하는 경우 클라이언트 쪽에서 수동으로 결과를 정렬하여 서버의 워크로드를 줄이는 것이 좋습니다.

기본적으로 결과 정렬은 사용하지 않도록 설정됩니다. 결과 정렬을 사용하도록 설정하려면 IDirectorySearch::SetSearchPreference 메서드에 전달된 ADS_SEARCHPREF_INFO 배열의 ADS_SORTKEY 구조를 가리키는 ADSTYPE_PROV_SPECIFIC 사용하여 ADS_SEARCHPREF_SORT_ON 검색 옵션을 설정합니다. 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는 생성된 특성에 대한 정렬을 지원하지 않으므로 정렬을 위해 생성된 특성을 지정할 수 없습니다. 또한 distinguishedName 특성은 정렬에 사용할 수 없습니다. 또한 Active Directory는 둘 이상의 특성에 대한 정렬을 허용하지 않으므로 ADS_SEARCHPREF_SORT_ON 검색 옵션은 하나의 ADS_SORTKEY 구조만 포함할 수 있습니다.