Sun Java™ System Directory Server 5.2 2005Q1 管理ガイド |
第 10 章
ディレクトリデータのインデックス作成書籍の索引と同様に、Directory Server のインデックスを利用することで、検索文字列とディレクトリの内容への参照を関連づけ、検索を速く行うことができます。インデックスは、独立したデータベースファイルに格納される属性値のテーブルです。インデックスの作成と管理は、ディレクトリ内のサフィックスごとに行われます。サフィックスの設定にインデックスを作成すると、サーバーは自動的にインデックスを管理します。
インデックスの基本概念、コストと利点、nsslapd-allidsthreshold 属性の説明、Directory Server のパフォーマンスを向上する方法については、『Directory Server Performance Tuning Guide』を参照してください。
この章は、次の節で構成されています。
インデックスの概要インデックスは、サフィックスごとに対応するデータベースディレクトリ内のファイルに格納されます。各インデックスファイルには、指定の属性についてサフィックスに定義されているすべてのインデックスが含まれます。たとえば、共通名属性 (cn) で維持されているすべてのインデックスは、databaseName_cn.db3 ファイルに格納されます。
インデックスファイルは、サフィックスを初期化したときに作成されます。また、この章で説明するコマンドを使用して作成することもできます。クライアントによる検索操作および内部操作の最中に、サーバーはインデックスにアクセスし、ディレクトリ内のエントリをより速く検出します。修正操作を行うときは、ディレクトリがディレクトリの内容を更新し、インデックスファイルを更新してインデックスを最新の状態に維持します。
Directory Server でサポートされているインデックスのタイプは次のとおりです。
- 実在インデックス (pres): このインデックスには、特定の属性を含むエントリのリストが含まれます。属性の値には依存しません。
- 等価インデックス (eq): このインデックスでは、特定の属性値を含むエントリを効率的に検索できます。
- 近似インデックス (approx): このインデックスでは、フィルタ用演算子 ~= を使用して、似た音のエントリを効率的に検索できます。たとえば、近似インデックスを利用すると、名前の一部分やスペルの間違った名前でも検索できます。Directory Server は、Metaphone 音声アルゴリズムのバリエーションを使用して、近似インデックスの検索を行います。
- 部分文字列インデックス (sub): このインデックスでは、たとえば cn=*john や cn=john* のように、属性値の部分文字列を効率的に検索できます。値ごとに多数の部分文字列があるため、このインデックスの維持にはコストがかかります。
Directory Server では、最小 2 文字の部分文字列による検索がインデックスに見つかるように部分文字列のインデックスを作成します。そのため (sn=*ab) という検索はインデックスを使用して高速化できますが、(sn=*a) という検索は高速化できません。Directory Server では、ワイルドカードの前に 1 文字だけあるような前方部分文字列検索を可能とする高度な最適化も用意しています。つまり、(sn=*a) ではなく、(sn=a*) の場合も部分文字列インデックスが利用できるときは高速化されます。部分文字列インデックスの詳細については、『Directory Server Performance Tuning Guide』を参照してください。
システムインデックス
システムインデックスは、削除や修正ができないインデックスです。これは、Directory Server が正常かつ効率的に機能する上で必要なインデックスです。次の表は、すべてのサフィックスに自動的に作成されるシステムインデックスを示しています。
デフォルトインデックス
ディレクトリに新しいサフィックスを作成すると、サーバーは対応するデータベースディレクトリにデフォルトのインデックスセットを設定します。インデックス作成の要件に応じて、デフォルトインデックスを変更できますが、インデックスの設定を変更する前に、企業内のサーバープラグインやその他のサーバーが、インデックス生成されている属性に依存していないことを確認する必要があります。
サフィックスの新規作成時に使われるデフォルトのインデックスセットを変更する方法については、「デフォルトのインデックスセットの変更」を参照してください。
次の表は、Directory Server の事前に設定されているデフォルトインデックスを示しています。
表 10-2 すべての新規サフィックスのデフォルトインデックス
属性
等価
実在
部分文字列
目的
cn
X
X
X
もっとも一般的なタイプのユーザーディレクトリ検索のパフォーマンスを向上させます。
givenName
X
X
X
もっとも一般的なタイプのユーザーディレクトリ検索のパフォーマンスを向上させます。
X
X
X
もっとも一般的なタイプのユーザーディレクトリ検索のパフォーマンスを向上させます。
mailAlternateAddress
X
Sun Java System Messaging Server で使われます。
mailHost
X
Sun Java System Messaging Server で使われます。
member
X
Sun Java System サーバーのパフォーマンスを向上させます。このインデックスは、参照整合性検査プラグインでも使われます。詳細は、「参照整合性の管理」を参照してください。
nsCalXItemId
X
X
X
Sun Java System Calendar Server で使われます。
nsLIProfileName
X
Sun Java System Messaging Server のローミング機能で使われます。
nsRoleDN
X
ロールベースの操作のパフォーマンスを向上させます。
nswcalCALID
X
Sun Java System Calendar Server で使われます。
owner
X
Sun Java System サーバーのパフォーマンスを向上させます。このインデックスは、参照整合性検査プラグインでも使われます。詳細は、「参照整合性の管理」を参照してください。
pipstatus
X
Sun Java System Server で使われます。
pipuid
X
Sun Java System Server で使われます。
seeAlso
X
Sun Java System サーバーのパフォーマンスを向上させます。このインデックスは、参照整合性検査プラグインでも使われます。詳細は、「参照整合性の管理」を参照してください。
sn
X
X
X
もっとも一般的なタイプのユーザーディレクトリ検索のパフォーマンスを向上させます。
telephoneNumber
X
X
X
もっとも一般的なタイプのユーザーディレクトリ検索のパフォーマンスを向上させます。
uid
X
Sun Java System サーバーのパフォーマンスを向上させます。
uniquemember
X
Sun Java System サーバーのパフォーマンスを向上させます。このインデックスは、参照整合性検査プラグインでも使われます。詳細は、「参照整合性の管理」を参照してください。
属性名のクイックリファレンス
次の表に、基本名 (実際の名前) とエイリアス名の両方を持つ属性のリストを示します。インデックスを作成する場合は、必ず基本名を使用してください。
インデックスの管理ここでは、Directory Server コンソールとコマンド行を使用して、特定の属性の実在インデックス、等価インデックス、近似インデックス、部分文字列インデックス、および国際化インデックスを作成および削除する方法を説明します。仮想リスト表示 (VLV) 操作に必要な手順については、「ブラウズインデックスの管理」を参照してください。
注
インデックスはサフィックスごとに異なるため、すべてのサフィックスの設定に新しいインデックスを作成する必要があります。
コンソールからサフィックスを新規作成するときに、既存サフィックスのインデックス設定のクローンを作成するオプションを選択できます。
新しいインデックスを作成する前に、インデックスを維持する利点とコストのバランスを検証します。次の点に注意してください。
- 電話番号のように、一般に数字が含まれる属性については、近似インデックスは効果的ではないので使わないでください。
- バイナリ属性については、部分文字列インデックスは機能しません。
- たとえば、jpegPhoto などのバイナリデータを格納するための属性などのように、大きい値には等価インデックスを使わないでください。
- インデックスの維持にはリソースが必要なので、検索対象となることの多い属性についてだけインデックスを作成してください。サーバーでエントリを作成するには、インデックスの付けられた属性をすべて調べたり、新しいエントリに含まれる各属性について新規エントリを生成したりする必要があるため、CPU 時間が必要となります。
- 各インデックスファイルのサイズは、ディレクトリの内容に比例します。
- インデックスが付いていない属性も検索要求で指定できますが、検索のタイプによっては、検索のパフォーマンスが低下します。
コンソールからのインデックスの管理
多くの属性でインデックスを変更または追加するときは、まず、サフィックスを読み取り専用に変更し、その内容を LDIF にエクスポートします。LDIF ファイルからサフィックスを再初期化することで、サフィックスのインデックスの再生成が速くなります。
- Directory Server コンソールの最上位の「設定」タブで「データ」ノードを展開し、インデックスを作成するサフィックスを選択します。右側のパネルで「インデックス」タブを選択します。
システムインデックスのテーブルは変更できません。「追加インデックス」テーブルの属性でインデックスを追加、変更、または削除します。
- インデックスが生成されていない属性のインデックスを追加するときは、「属性の追加」ボタンをクリックします。ダイアログが表示されるので、インデックスを生成する 1 つまたは複数の属性を選択し、「了解」をクリックします。
「追加インデックス」テーブルに新しい属性が表示されます。
- 属性のインデックスを変更するときは、「追加インデックス」テーブルで、その属性で維持するインデックスのタイプのチェックボックスを選択または選択解除します。
- 英語以外の言語の値を含む属性のインデックスを作成する場合は、「マッチングルール」フィールドで使う照合順序の OID を入力します。
複数の OID をスペースではなくコンマで区切って指定することにより、属性に複数の言語を使ったインデックスを付けることができます。サポートされているロケールと、それに関連する照合順序の OID のリストについては、『Directory Server Administration Reference』を参照してください。
- 属性のすべてのインデックスを削除するときは、テーブルでその行を選択し、「属性の削除」ボタンをクリックします。
- 「保存」をクリックして、新しいインデックス設定を保存します。
属性のすべてのインデックスを削除すると、サーバーはその属性のインデックスファイルを削除し、設定が完了します。属性のインデックスを変更または追加した場合は、次の手順に進みます。
- 新しいインデックスを利用するには、データベースファイルの更新が必要であることを示す警告ダイアログが表示されます。サフィックスのインデックスの再生成を行うか、サフィックスを再初期化できます。
- 1 つまたは 2 つのインデックスを追加または変更した場合、またはサフィックスを利用不可にできない場合は、サフィックスのインデックスの再生成を行います。「サフィックスを再インデックス」ボタンをクリックし、インデックスを再生成するためのダイアログを表示します。デフォルトでは、変更した属性、またはインデックス設定に追加した属性が選択されています。「了解」をクリックして、これらの属性のインデックスの再生成を開始します。数百万のエントリを持つディレクトリで多数の属性のインデックスの再生成を行うには、数時間が必要ですが、インデックスの再生成の最中も、サフィックスは常にオンラインで維持されます。
- いくつかの属性でインデックスを追加または変更した場合、このサフィックスからエクスポートした最新の LDIF ファイルが用意されていれば、「サフィックスを初期化」ボタンをクリックします。「サフィックスを初期化」ボタンが表示されるので、LDIF ファイルの名前を入力するか、名前とパスを表示して選択し、「了解」をクリックします。サーバーは LDIF ファイルに基づいてサフィックスを再初期化し、新しい設定ですべてのインデックスを作成します。ディレクトリのサイズにもよりますが、サフィックスの再初期化は通常は 2 つ以上の属性のインデックスの再生成よりも速く行われます。ただし、初期化中はサフィックスを利用できません。
- サフィックスのインデックスの再生成または再初期化を行わない場合、すべてのデータを続けて利用することはできますが、新しいインデックスは作成されず、ディレクトリのアクセスパフォーマンスは向上しません。
コマンド行からのインデックスの管理
コマンド行からのインデックスの作成または変更は、次の 2 つの手順で行われます。
インデックス設定エントリの作成
インデックスが設定されていない属性のインデックスを作成するには、対応するデータベースの設定内にその属性の新しいエントリを作成する必要があります。
インデックス設定エントリの DN は次のとおりです。
cn=attributeName,cn=index,cn=databaseName,cn=ldbm database,
cn=plugins,cn=configここで、databaseName はインデックスを作成するサフィックスに対応したデータベースの名前です。たとえば次のコマンドは、フランス語の値で sn (姓) 属性の実在、等価、部分文字列、近似インデックスを作成します。
ldapmodify -a -h host -p port -D "cn=Directory Manager" -w password
dn: cn=sn,cn=index,cn=databaseName,cn=ldbm database,
cn=plugins,cn=config
objectClass: top
objectClass:nsIndex
cn:sn
nsSystemIndex: false
nsIndexType: pres
nsIndexType: eq
nsIndexType: sub
nsIndexType: approx
nsMatchingRule: 1.3.6.1.4.1.42.2.27.9.4.76.1
^Dインデックス設定エントリは nsIndex オブジェクトクラスを持ち、nsSystemIndex 属性が必ず存在して、その値が false である必要があります。新しいシステムインデックスを作成することはできません。システムインデックスは、Directory Server によって内部的に定義されているものだけが保持されます。
nsIndexType 属性の値には、指定の属性で維持されるインデックスのリストが含まれます。対応するインデックスを定義するには、前述のいずれかの値を使います。
単一の値 none を使用してその属性のインデックスを明示的に無効にすることもできるので、たとえば、属性のインデックスを一時的に無効にできます。インデックス設定エントリに nsIndexType 属性を含めない場合、すべてのインデックスがデフォルトで維持されます。
オプションの nsMatchingRule 属性には、サーバーによって認識されるすべてのマッチングルールの OID が含まれます。ここには国際化インデックスの言語照合順序の OID が含まれますが、CaseExactMatch のようなその他のマッチングルールも含まれます。サポートされているロケールと、それに関連する照合順序の OID のリストについては、『Directory Server Administration Reference』を参照してください。
インデックス設定属性の詳細については、『Directory Server Administration Reference』を参照してください。
注
インデックスを作成する場合は、属性のエイリアスではなく、基本名を常に使う必要があります。属性の基本名は、スキーマでその属性に一覧表示された最初の名前です。たとえば、userid 属性では uid が基本名になります。属性の基本名とエイリアス名のリストについては、表 10-3 を参照してください。
インデックス設定エントリの変更
属性にすでに定義されているインデックスの設定を変更するには、対応するインデックスエントリを修正します。たとえば、前述の例で定義した sn インデックス設定に対して次のコマンドを実行すると、近似インデックスが削除され、言語がカナダ系のフランス語 (Canadian French) に変更されます。
ldapmodify -h host -p port -D "cn=Directory Manager" -w password
dn: cn=sn,cn=index,cn=databaseName,cn=ldbm database,
cn=plugins,cn=config
changetype: modify
delete: nsIndexType
nsIndexType: approx
-
replace: nsMatchingRule
nsMatchingRule: 1.3.6.1.4.1.42.2.27.9.4.78.1
^Ddb2index-task の実行
インデックスエントリを作成する、既存のインデックスエントリにインデックスタイプを追加するか、照合順序を変更する処理が完了したら、directoryserver db2index-task コマンドを実行して、新しいインデックスを生成します。このコマンドはサフィックスの内容を読み取り、設定エントリに基づいて指定の属性のインデックスの再生成を行います。
このコマンドの実行中もサーバーを通じてサフィックスの内容を利用できますが、コマンドの実行が完了するまで検索のインデックス対応は行われません。インデックスの再生成は多くのリソースを消費するタスクであるため、サーバー上のその他の処理のパフォーマンスに影響を生じることがあります。ディレクトリのサイズにもよりますが、サフィックスの再初期化は通常は 2 つ以上の属性のインデックスの再生成より速く行われます。ただし、初期化中はサフィックスを利用できません。詳細については、「サフィックスの再初期化」を参照してください。
次の例は、databaseName に対応するサフィックスに sn インデックスを再生成します。
# /usr/sbin/directoryserver db2index-task
-D "cn=Directory Manager" -w password -n databaseName -t sn詳細については、『Directory Server Man Page Reference』を参照してください。
属性のすべてのインデックスの削除
属性に設定されているすべてのインデックスを削除するときは、設定エントリとデータベースファイルを削除します。たとえば次のコマンドは、databaseName というデータベースに含まれる sn 属性のすべてのインデックスの設定を解除します。
ldapdelete -h host -p port -D "cn=Directory Manager" -w password ¥
"cn=sn,cn=index,cn=databaseName,cn=ldbm database,cn=plugins, ¥
cn=config"このエントリを削除すると、sn 属性のインデックスは databaseName データベースに対応するサフィックスで維持されなくなります。ディスクスペースを節約するために、サーバーが使わなくなったインデックスファイルを削除することもできます。この例では、次のファイルを削除できます。
ServerRoot/slapd-serverID/db/databaseName/databaseName_sn.db3
サフィックスのインデックスの再生成
インデックスファイルが破損した場合は、サフィックスのインデックスの再生成を行なって、対応するデータベースディレクトリにインデックスファイルを作成し直す必要があります。Directory Server コンソールを使用してサフィックスのインデックスの再生成を行うには、インデックスの再生成と再初期化の 2 つの方法があります。
サフィックスのインデックスの再生成
サフィックスのインデックスの再生成を行うと、サーバーはサフィックスに含まれるすべてのエントリを調べ、インデックスファイルを再作成します。インデックスの再生成時は、サフィックスの内容に対して読み取りと書き込みを実行できます。ただし、インデックスを再生成するすべての属性についてサフィックス全体をサーバーがスキャンする必要があります。このため、設定するインデックスによっては、数百万のエントリを持つサフィックスでは完了までに最大で数時間かかります。また、インデックスの再生成中はインデックスを利用できず、サーバーのパフォーマンスに影響が生じます。
コンソールからサフィックスのインデックスの再生成を行うには、次の手順を実行します。
- Directory Server コンソールの最上位の「設定」タブで「データ」ノードを展開し、インデックスを再生成するサフィックスを表示します。
- このサフィックスの設定ノードをマウスの右ボタンでクリックし、ポップアップメニューから「再インデックス」を選択します。あるいは、ノードをマウスの左ボタンでクリックして選択し、「オブジェクト」メニューから「再インデックス」を選択します。
選択しているサフィックスにインデックスが設定されているすべての属性をリスト表示した「サフィックスを再インデックス」ダイアログが表示されます。
- インデックスを再生成する属性の隣にあるチェックボックスを選択します。選択には、「すべてをチェック」、「チェックしない」ボタンが役立ちます。属性のすべてのインデックスが同じデータベースファイルに格納されているので、すべてのインデックスを同時に再生成する必要があります。
- 「了解」をクリックします。インデックスの再生成の処理中に予期せぬ検索結果が得られたり、パフォーマンスに影響が生じたりする可能性についてコンソールに確認メッセージが表示されます。
- 「はい」をクリックしてインデックスの再生成を開始します。
インデックスの再生成に関するメッセージはダイアログに表示されます。処理が完了したら、ダイアログを閉じます。
コマンド行からサフィックスのインデックスの再生成を行うには、「db2index-task の実行」で説明している手順に従って、インデックスファイルを再作成するすべての属性を指定します。
サフィックスの再初期化
サフィックスを再初期化すると、新しい内容がインポートされてサフィックスの内容が置き換えられ、新しいインデックスファイルが作成されます。サフィックスの再初期化は、エントリのロード時にすべての属性が 1 つのパスでインデックスが作成されるので、通常は複数の属性のインデックスの再生成よりも速く行われます。ただし、再初期化中はサフィックスを利用できません。
Directory Server コンソールまたはコマンド行から次のすべての手順を実行できます。
- 「アクセス権とリフェラルの設定」で説明している方法で、サフィックスを読み取り専用に設定します。内容をエクスポートした後に変更が加えられないように、最初にサフィックスを書き込み不可に設定する必要があります。
- 「コンソールを使用した LDIF への単一サフィックスのエクスポート」で説明している方法で、サフィックス全体を LDIF ファイルにエクスポートします。
- 「サフィックスの初期化」で説明している方法で、同じ LDIF ファイルをインポートしてサフィックスを再初期化します。
初期化中は、サフィックスを利用することはできません。初期化が完了すると、設定されたすべてのインデックスを利用できるようになります。
- 「アクセス権とリフェラルの設定」で説明している方法で、サフィックスを書き込み可能に戻します。
デフォルトのインデックスセットの変更
新規サフィックスの作成時に使われるデフォルトのインデックスセットは、次のエントリの下に定義されます。
cn=default indexes,cn=config,cn=ldbm database,cn=plugins,cn=config
コンソールまたはコマンド行からサフィックスを作成するたびに、対応するデータベースの初期インデックス設定としてデフォルトのインデックス定義のエントリがコピーされます。
デフォルトのインデックスセットの設定は、コマンド行ユーティリティだけを使用して行われます。デフォルトのインデックスエントリの構文は、「コマンド行からのインデックスの管理」で説明したインデックス設定エントリの構文とまったく同じです。たとえば、デフォルトのインデックス設定エントリを追加するには、次の ldapmodify コマンドを実行します。
ldapmodify -a -h host -p port -D "cn=Directory Manager" -w password
dn: cn=drink,cn=default indexes,cn=config,cn=ldbm database,
cn=plugins,cn=config
objectClass: top
objectClass: nsIndex
cn: drink
nsSystemIndex: false
nsIndexType: eq
nsIndexType: sub
nsMatchingRule: 1.3.6.1.4.1.42.2.27.9.4.76.1
^Dこのエントリを追加すると、すべての新しいサフィックスの drink 属性の値には、等価検索と部分文字列の検索がフランス語でインデックス設定されます。
デフォルトのインデックスエントリを変更または削除するには、ldapmodify コマンドまたは ldapdelete コマンドを使用して cn=default indexes,cn=config,cn=ldbm database,cn=plugins,cn=config 内のインデックスセットを編集します。
ブラウズインデックスの管理ブラウズインデックスは、サーバー側のソートまたは仮想リスト表示 (VLV) 結果を要求する検索操作のための特別なインデックスです。ブラウズインデックスを利用することで、多数の検索結果をサーバー側でソートするように要求する検索のパフォーマンスが向上します。ディレクトリの設定によっては、ブラウズインデックスが定義されていない場合にソートを要求する検索の実行をサーバーが拒否することもあります。これにより、大規模なソート処理によってサーバーリソースがオーバロードすることを防止できます。
ブラウズインデックスは、検索のベースとなるエントリに適用され、ソート要求で使用する検索フィルタごとに専用のインデックスを作成する必要があります。たとえば、クライアントアプリケーションがすべてのユーザーのソートされたリストを頻繁に要求する場合は、クライアントが使用するフィルタ文字列用に ou=People のブラウズインデックスを作成します。
その他のインデックスと同様に、ブラウズインデックスの維持に必要な更新処理の最中は、パフォーマンスに影響が生じます。ブラウズインデックスの配備は慎重に計画し、テストする必要があります。
コンソール用のブラウズインデックス
Directory Server コンソールは、パネルの内容を更新するためにディレクトリ全体を対象に検索処理を頻繁に行います。「ディレクトリツリーの表示オプション」で説明した方法で、ディレクトリツリーに表示されるエントリをソートするようにコンソールを設定したときは、コンソール用のブラウズインデックスを作成する必要があります。
コンソール用のブラウズインデックスは、コンソールが実行する検索に特化されています。これは、コンソールから作成できます。コンソール用のブラウズインデックスを作成するには、次の手順を実行します。
- Directory Server コンソールの最上位の「ディレクトリ」タブで、たとえば数千のユーザーエントリを持つ ou=People,dc=example,dc=com のように、ソートが必要な大規模なサブツリーの親を表示します。
- この親エントリをマウスの右ボタンでクリックし、ポップアップメニューから「ブラウズインデックスの作成」を選択します。あるいは、エントリをマウスの左ボタンでクリックして選択し、「オブジェクト」メニューから「ブラウズインデックスの作成」を選択します。
「ブラウズインデックスの作成」ダイアログボックスが開き、インデックス作成の状態が表示されます。コンソールは後述するブラウズインデックス設定エントリを作成し、インデックスファイルの内容を生成します。
- 「閉じる」をクリックして、「ブラウズインデックスの作成」ダイアログボックスを閉じます。
新しいインデックスは、コンソールの更新処理に直ちに適用され、ディレクトリに追加する新しいデータにも対応して維持されます。サーバーを再起動する必要はありません。
コンソール用のブラウズインデックスの設定は、次のエントリから構成されます。vlvSearch エントリは、インデックスが設定される検索のベース、対象、フィルタを定義します。vlvIndex エントリの vlvSort 属性は、ソート可能な属性をソートされた順序で示します。
dn: cn=MCC entryDN,cn=databaseName,cn=ldbm database,
cn=plugins,cn=config
objectClass: top
objectClass: vlvSearch
cn: MCC entryDN
vlvBase: "entryDN"
vlvScope: 1
vlvFilter: (|(objectclass=*)(objectclass=ldapsubentry))
dn: cn=by MCC entryDN, cn=MCC entryDN,cn=databaseName,
cn=ldbm database,cn=plugins,cn=config
objectClass: top
objectClass: vlvindex
cn: by MCC entryDN
vlvSort: cn givenname o ou sn uidDirectory Server コンソール用のブラウズインデックスを削除するには、次の手順を実行します。
- Directory Server コンソールの最上位レベルにある「ディレクトリ」タブでディレクトリツリーを表示し、ブラウズインデックスを作成したエントリを探します。
- このエントリをマウスの右ボタンでクリックし、ポップアップメニューから「ブラウズインデックスの削除」を選択します。あるいは、エントリをマウスの左ボタンでクリックして選択し、「オブジェクト」メニューから「ブラウズインデックスの削除」を選択します。このメニュー項目は、コンソール用のブラウズインデックスのエントリを選択している場合にだけ選択できます。
- 「ブラウズインデックスの削除」ダイアログボックスが表示され、インデックスを削除するかどうかの確認が求められます。「はい」をクリックして、ブラウズインデックスを削除します。
クライアント検索用のブラウズインデックス
クライアント検索結果をソートするカスタムブラウズインデックスは、手動で定義する必要があります。コマンド行を使ったブラウズインデックス、または仮想リスト表示 (VLV) の作成は、次の 2 つの手順で行われます。
ブラウズインデックスエントリの指定
ブラウズインデックスは、特定のベースエントリとサブツリーに対して指定された検索ごとに異なります。ブラウズインデックスの設定は、エントリを含むサフィックスのデータベース設定に定義されます。
ブラウズインデックスの設定には、2 つのエントリが使用されます。一つは vlvSearch オブジェクトクラスを使うエントリで、検索結果にインデックスを作成する検索のベース、対象、フィルタを指定します。二つ目のエントリは最初のエントリの子エントリで、vlvIndex オブジェクトクラスを使用してソートする属性とソート順序を指定します。
次の例は、ldapmodify ユーティリティを使用して、2 つのブラウズインデックス設定エントリを作成します。
ldapmodify -a -h host -p port -D "cn=Directory Manager" -w password
dn: cn=Browsing ou=People, cn=databaseName,
cn=ldbm database,cn=plugins,cn=config
objectClass: top
objectClass: vlvSearch
cn: Browsing ou=People
vlvbase: ou=People,dc=example,dc=com
vlvscope: 1
vlvfilter: (objectclass=inetOrgPerson)
dn: cn=Sort rev employeenumber, cn=Browsing ou=People,
cn=databaseName,cn=ldbm database,cn=plugins,cn=config
objectClass: top
objectClass: vlvIndex
cn: Sort rev employeenumber
vlvSort: -employeenumber
^Dvlvscope は、0 (ベースエントリだけの場合)、1 (ベースのすぐ下の子の場合)、または 2 (ベースをルートとするサブツリー全体) のいずれかです。vlvfilter は、クライアント検索操作で使われる LDAP フィルタと同じフィルタです。すべてのブラウズインデックスエントリは同じ場所に配置されるため、cn の値にはブラウズインデックスの名前を指定しておく必要があります。
vlvSearch エントリは、それぞれが少なくとも 1 つの vlvIndex エントリを持つ必要があります。vlvSort 属性は、ソートする属性とソート順序を定義する属性名のリストです。属性名の前につけられたダッシュ (-) は、順序を逆にすることを意味します。複数の vlvIndex エントリを定義することで、検索に複数のインデックスを定義できます。前述の例では、次のエントリを追加できます。
ldapmodify -a -h host -p port -D "cn=Directory Manager" -w password
dn: cn=Sort sn givenname uid, cn=Browsing ou=People,
cn=databaseName,cn=ldbm database,cn=plugins,cn=config
objectClass: top
objectClass: vlvIndex
cn: Sort sn givenname uid
vlvSort: sn givenname uid
^Dブラウズインデックスの設定を変更するには、対応する vlvSearch エントリまたは vlvIndex エントリを編集します。ブラウズインデックスを削除してサーバーがそれを維持しないようにするには、それぞれの vlvIndex エントリを削除するか、インデックスが 1 つしかない場合は、vlvSearch エントリと vlvIndex エントリの両方を削除します。vlvIndex エントリを削除すると、たとえば次のような対応するデータベース ファイルも削除できるようになります。
ServerRoot/slapd-serverID/db/dbName/dbName_vlv#Sortsngivennameuid.db3
vlvindex コマンドの実行
ブラウズインデックスのエントリの作成、または既存エントリの変更が完了したら、directoryserver vlvindex コマンドを実行して、新しいブラウズインデックスセットを生成する必要があります。このコマンドは、ディレクトリの内容をスキャンし、ブラウズインデックス用のデータベースファイルを作成します。
ブラウズインデックスを生成するには、次のコマンドを使います。
次の例は、前の項で定義したブラウズインデックスを生成します。
# /usr/sbin/directoryserver vlvindex -n databaseName -T "Browsing ou=People"
表 10-4 例で使った vlvindex オプションの説明
オプション
内容
-n
インデックスを作成するエントリを含んだ、データベースの名前を指定します。
-T
対応するブラウズインデックスの vlvSearch エントリのネーミング属性の値を指定します。指定した vlvSearch エントリの vlvIndex エントリに対応するすべてのインデックスが生成されます。
コマンドの詳細については、『Directory Server Man Page Reference』を参照してください。