IDirectorySearch を使用した検索結果の並べ替え

既定では、検索結果は保証された順序で返されません。 ADS_SEARCHPREF_SORT_ON の基本設定は、クライアントに返される前に、指定された属性値で結果セットを並べ替えるようサーバーに指示します。

並べ替えにインデックス付き属性を使用することをお勧めします。 それ以外の場合、サーバーは、クライアントに結果を送信する前に、完全な結果セットを取得して並べ替える必要があります。 これは、ページ検索にも適用されます。 フィルターにインデックス付き属性が含まれており、その属性が並べ替えキーとして指定されている場合、並べ替えられた検索のパフォーマンスが向上します。この場合、Active Directory はフィルターの処理中に並べ替えを満たすことができます。 たとえば、一連のユーザーに対する効率的な並べ替えクエリには、(sn>smith) を含むフィルターと sn の並べ替えキーを含まれる場合があります。

ADS_SEARCHPREF_SORT_ON 検索オプションを使用してサーバー側で並べ替えを行うと、サーバーのパフォーマンスが低下します。 多くの検索を実行する場合は、クライアント側で結果を手動で並べ替えて、サーバーのワークロードを減らすことを検討してください。

既定では、結果の並べ替えは無効になっています。 結果の並べ替えを有効にするには、IDirectorySearch::SetSearchPreference メソッドに渡されるADS_SEARCHPREF_INFO 配列内の ADS_SORTKEY 構造体を指す ADSTYPE_PROV_SPECIFIC を使用して、DS_SEARCHPREF_SORT_ONA 検索オプションを設定します。 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 検索オプションには 1 つのADS_SORTKEY 構造のみを含めることができます。