Sun ONE ロゴ     前へ     目次     索引     ドキュメントホーム     次へ    
Sun ONE Directory Server 管理ガイド



第 10 章   インデックスの管理

書籍の索引と同様に、Directory Server のインデックスを利用することで、検索文字列とディレクトリの内容への参照を関連づけ、検索を速く行うことができます。インデックスは、独立したデータ ベースファイルに格納される属性値のテーブルです。インデックスの作成と管理は、ディレクトリ内のサフィックスごとに行われます。サフィックスの設定にイ ンデックスを作成すると、サーバーは自動的にインデックスを管理します。

インデックスの基本概念、コストと利点、nsslapd-allidsthreshold 属性の説明、Directory Server のパフォーマンスを向上する方法については、『Sun ONE Directory Server インストールおよびチューニングガイド』の第 7 章「インデックスのチューニング」を参照してください。

この章は、次の節で構成されています。

インデックスの概要

インデックスは、サフィックスごとに対応するデータベースディレクトリ内のファイルに格納されます。各インデックスファイルには、指定の属性についてサフィックスに定義されているすべてのインデックスが含まれます。たとえば、共通名属性 (cn) で維持されているすべてのインデックスは、databaseName_cn.db3 ファイルに格納されます。

インデックスファイルは、サフィックスを初期化したときに作成されます。また、この章で説明するコマンドを使って作成することもできます。クライアントに よる検索操作および内部操作の最中に、サーバーはインデックスにアクセスし、ディレクトリ内のエントリをより速く検出します。修正操作を行うときは、ディ レクトリはディレクトリの内容を更新し、インデックスファイルを更新してインデックスを最新の状態に維持する必要があります。

Directory Server でサポートされているインデックスのタイプは次のとおりです。

  • 実在インデックス (pres) : このインデックスには、特定の属性を含むエントリのリストが含まれます。属性の値には依存しません。
  • 等価インデックス (eq) : このインデックスでは、特定の属性値を含むエントリを効率的に検索できます。
  • 近似インデックス (approx) : このインデックスでは、フィルタ用演算子 ~= を使って、似た音のエントリを効率的に検索できます。たとえば、近似インデックスを利用すると、名前の一部分やスペルの間違った名前でも検索できます。 Directory Server は、Metaphone 音声アルゴリズムのバリエーションを使って、近似インデックスの検索を行います。


  • Directory Server 5.2 の Metaphone 音声アルゴリズムでは、US-ASCII 文字だけがサポートされています。したがって、近似インデックスは英語の値だけで使ってください。



  • 部分文字列インデックス (sub) : このインデックスでは、たとえば cn=*john* のように、属性値の部分文字列を効率的に検索できます。値ごとに多数の部分文字列があるため、このインデックスの維持にはコストがかかります。
  • 部分文字列インデックスとして、各エントリの 2 文字以上を指定する必要があります。

  • マッチングルールインデックス : 地域に対応したマッチングルールの OID (照合順序) とインデックス登録される属性を関連づけることで、国際化ディレクトリの検索を速く行います。
  • ブラウズインデックス : VLV (仮想リスト表示) 制御で実行される検索を高速化します。たとえば ou=People,dc=example,dc=com のように、各サブツリーの表示パフォーマンスを向上させるために、ディレクトリツリーのすべての分岐点でブラウズインデックスを作成できます。

システムインデックス

システムインデックスは、削除や修正ができないインデックスです。これは、Directory Server が正常かつ効率的に機能する上で必要なインデックスです。次の表は、すべてのサフィックスに自動的に作成されるシステムインデックスを示しています。

表 10-1    すべてのサフィックスのシステムインデックス 

属性

等価

実在

目的

aci

X

ディレクトリサーバーが、ディレクトリに維持されているアクセス制御情報を速く取得できるようにする

entrydn

X

DN 検索に基づくエントリの取得を速くする

nsUniqueId

X

特定のエントリの検索に使われる

nscpEntryDN

X

レプリケーションのために Directory Server で内部的に使われる

nsds5ReplConflict

X

X

レプリケーションの競合の検出に利用される

numsubordinates

X

「ディレクトリ」タブの表示パフォーマンスを強化するために、Directory Server コンソールで使われる

objectClass

X

ディレクトリのサブツリー検索を速くするために使われる

parentID

X

1 レベル検索におけるディレクトリのパフォーマンスを強化する

デフォルトインデックス

ディレクトリに新しいサフィックスを作成すると、サーバーは対応するデータベースディレクトリにデフォルトのインデックスセットを設定します。インデック ス作成の要件に応じて、デフォルトインデックスを変更できますが、インデックスの設定を変更する前に、企業内のサーバープラグインやその他のサーバーが、 インデックス生成されている属性に依存していないことを確認する必要があります。

サフィックスの新規作成時に使われるデフォルトのインデックスセットを変更する方法については、「デフォルトのインデックスセットの変更」を参照してください。

次の表は、Directory Server の事前に設定されているデフォルトインデックスを示しています。

表 10-2    すべての新規サフィックスのデフォルトインデックス 

属性

等価

実在

部分文字列

目的

cn

X

X

X

もっとも一般的なタイプのユーザーディレクトリ検索のパフォーマンスを向上させる

givenName

X

X

X

もっとも一般的なタイプのユーザーディレクトリ検索のパフォーマンスを向上させる

mail

X

X

X

もっとも一般的なタイプのユーザーディレクトリ検索のパフォーマンスを向上させる

mailAlternateAddress

X

Sun ONE Messaging Server で使われる

mailHost

X

Sun ONE Messaging Server で使われる

member

X

Sun ONE サーバーのパフォーマンスを向上させる。このインデックスは、参照整合性検査プラグインでも使われる。詳細は、「参照整合性の管理」を参照

nsCalXItemId

X

X

X

Sun ONE Calendar Server で使われる

nsLIProfileName

X

Sun ONE Messaging Server のローミング機能で使われる

nsRoleDN

X

ロールベースの操作のパフォーマンスを向上させる

nswcalCALID

X

Sun ONE Calendar Server で使われる

owner

X

Sun ONE サーバーのパフォーマンスを向上させる。このインデックスは、参照整合性検査プラグインでも使われる。詳細は、『Sun ONE Directory Server Administration Guide』を参照

pipstatus

X

Sun ONE Servers で使われる

pipuid

X

Sun ONE Servers で使われる

seeAlso

X

Sun ONE サーバーのパフォーマンスを向上させる。このインデックスは、参照整合性検査プラグインでも使われる。詳細は、「参照整合性の管理」を参照

sn

X

X

X

もっとも一般的なタイプのユーザーディレクトリ検索のパフォーマンスを向上させる

telephoneNumber

X

X

X

もっとも一般的なタイプのユーザーディレクトリ検索のパフォーマンスを向上させる

uid

X

Sun ONE サーバーのパフォーマンスを向上させる。

uniquemember

X

Sun ONE サーバーのパフォーマンスを向上させる。このインデックスは、参照整合性検査プラグインでも使われる。詳細は、「参照整合性の管理」を参照

データベース内の標準インデックスファイル

デフォルトインデックスとその他の内部インデックス作成メカニズムを維持する必要があるため、Directory Server では、いくつかの標準インデックスファイルも維持します。デフォルトで提供される標準インデックスは次のとおりです。ユーザーがこれらのファイルを作成す る必要はありません。

  • databaseName_id2entry.db3 : ディレクトリエントリの実際のデータベースが含まれる。その他のすべてのデータベースファイルは、このファイルから作成し直すことができる
  • databaseName_id2children.db3 : 1 レベル検索、つまりあるエントリのすぐ下の子だけを調べるように、検索の範囲を制限する
  • databaseName_dn.db3 : サブツリー検索、つまりあるエントリと、そのエントリの下にあるサブツリーのすべてのエントリを調べるように、検索の範囲を制御する
  • databaseName_dn2id.db3 : エントリの識別名を ID 番号に割り当てることにより、すべての検索を効果的に開始する

属性名のクイックリファレンス

次の表に、基本名 (実際の名前) とエイリアス名の両方を持つ属性のリストを示します。インデックスを作成する場合は、必ず基本名を使ってください。

表 10-3    属性の基本名とエイリアス 

属性の基本名

属性のエイリアス名

authorCn

documentAuthorCommonName

authorSn

documentAuthorSurname

c

countryName

cn

commonName

co

friendlyCountryName

dc

domainComponent

dn

distinguishedName

drink

favoriteDrink

facsimileTelephoneNumber

fax

l

localityName

labeledUri

labeledUrl

mail

rfc822mailbox

mobile

mobileTelephoneNumber

o

organizationName

ou

organizationalUnitName

pager

pagerTelephoneNumber

sn

surname

st

stateOrProvinceName

street

streetAddress

ttl

timeToLive

uid

userId

インデックスの管理

ここでは、Directory Server コンソールとコマンド行を使って、特定の属性の実在インデックス、等価インデックス、近似インデックス、部分文字列インデックス、および国際化インデック スを作成および削除する方法を説明します。VLV (仮想リスト表示) 操作の前に必要な手順については、「ブラウズインデックスの管理」を参照してください。



インデックスはサフィックスごとに異なるため、すべてのサフィックスの設定に新しいインデックスを作成する必要があります。

コンソールからサフィックスを新規作成するときに、既存のサフィックスのインデックス設定のクローンを作成するオプションを選択できます。



新しいインデックスを作成する前に、インデックスを維持する利点とコストのバランスを検証します。次の点に注意してください。

  • 電話番号のように、一般に数字が含まれる属性については、近似インデックスは効果的ではないので使わないこと
  • バイナリ属性については、部分文字列インデックスは機能しない。たとえば、jpegPhoto などのバイナリデータを格納するための属性などのように、大きい値には等価インデックスを使わないこと
  • インデックスの維持にはリソースが必要なので、検索対象となることの多い属性についてだけインデックスを作成すること。サーバーでエント リを作成するには、インデックスの付けられた属性をすべて調べたり、新しいエントリに含まれる各属性について新規エントリを生成したりする必要があるた め、CPU 時間が必要となる
  • 各インデックスファイルのサイズは、ディレクトリの内容に比例する
  • インデックスが付いていない属性も検索要求で指定できるが、検索のタイプによっては、検索のパフォーマンスが低下する

コンソールからのインデックスの管理

多くの属性でインデックスを変更または追加するときは、まず、サフィックスを読み取り専用に変更し、その内容を LDIF にエクスポートします。LDIF ファイルからサフィックスを再初期化することで、サフィックスのインデックスの再生成が速くなります。

  1. Directory Server コンソールの最上位の「設定」タブで「データ」ノードを展開し、インデックスを生成するサフィックスを選択します。右側のパネルで「インデックス」タブを選択します。
  2. システムインデックスのテーブルは変更できません。「追加インデックス」テーブルの属性でインデックスを追加、変更、または削除します。

  3. インデックスが生成されていない属性のインデックスを追加するときは、「属性の追加」ボタンをクリックします。ダイアログが表示されるので、インデックスを生成する 1 つまたは複数の属性を選択し、「了解」をクリックします。
  4. 「追加インデックス」テーブルに新しい属性が表示されます。

  5. 属性のインデックスを変更するときは、「追加インデックス」テーブルで、その属性で維持するインデックスのタイプのチェックボックスを選択または選択解除します。
  6. 英語以外の言語の値を含む属性のインデックスを作成する場合は、「マッチングルール」フィールドで使う照合順序の OID を入力します。
  7. 複数の OID をスペースではなくコンマで区切って指定することにより、属性に複数の言語を使ったインデックスを付けることができます。サポートされているロケールと、それに関連する照合順序の OID のリストについては、『Sun ONE Directory Server Reference Manual』の付録 C 「Directory Internationalization」を参照してください。

  8. 属性のすべてのインデックスを削除するときは、テーブルでその行を選択し、「属性の削除」ボタンをクリックします。
  9. 「保存」をクリックして、新しいインデックス設定を保存します。
  10. 属性のすべてのインデックスを削除すると、サーバーはその属性のインデックスファイルを削除し、設定が完了します。属性のインデックスを変更または追加した場合は、次の手順に進みます。

  11. 新しいインデックスを利用するには、データベースファイルの更新が必要であることを示す警告ダイアログが表示されます。サフィックスのインデックスの再生成を行うか、サフィックスを再初期化できます。

  • 1 つまたは 2 つのインデックスを追加または変更した場合、またはサフィックスを利用不可にできない場合は、サフィックスのインデックスの再生成を行います。「サフィッ クスを再インデックス」ボタンをクリックし、インデックスを再生成するためのダイアログを表示します。デフォルトでは、変更した属性、またはインデックス 設定に追加した属性が選択されています。「了解」をクリックして、これらの属性のインデックスの再生成を開始します。数百万のエントリを持つディレクトリ で多数の属性のインデックスの再生成を行うには、数時間が必要ですが、インデックスの再生成の最中も、サフィックスは常にオンラインで維持されます。
  • いくつかの属性でインデックスを追加または変更した場合、このサフィックスからエクスポートした最新の LDIF ファイルが用意されていれば、「サフィックスを初期化」ボタンをクリックします。「サフィックスを初期化」ボタンが表示されるので、LDIF ファイルの名前を入力するか、名前とパスを表示して選択し、「了解」をクリックします。サーバーは LDIF ファイルに基づいてサフィックスを再初期化し、新しい設定ですべてのインデックスを作成します。ディレクトリのサイズにもよりますが、サフィックスの再初 期化は通常は 2 つ以上の属性のインデックスの再生成よりも速く行われます。ただし、初期化中はサフィックスを利用できません。
  • サフィックスのインデックスの再生成または再初期化を行わない場合、すべてのデータを続けて利用することはできますが、新しいインデックスは作成されず、ディレクトリのアクセスパフォーマンスは向上しません。

サフィックスのインデックスの再生成または再初期化を行うと、追加されたすべての新規データおよびディレクトリ内の既存データに対して、新しいインデックスが直ちに有効になります。サーバーを再起動する必要はありません。

コマンド行からのインデックスの管理

コマンド行からのインデックスの作成または変更は、次の 2 つの手順で行われます。

  • ldapmodify コマンド行ユーティリティを使用して、インデックス設定エントリを追加または変更します。インデックスはサフィックスごとに設定され、対応するデータベース設定にインデックス設定エントリが格納されます。
  • db2index.pl Perl スクリプト (Solaris パッケージでは directoryserver db2index-task) を実行して、サーバーに保持される新しいインデックスのセットを生成します。


  • 警告

    システムインデックスを削除すると、Directory Server のパフォーマンスに重大な影響を及ぼすため、このインデックスは削除しないでください。システムインデックスは、cn=index,cn=databaseName,cn=ldbm database,cn=plugins,cn=config エントリと、cn=default indexes,cn=config,cn=ldbm database,cn=plugins,cn=config エントリの下にあります。

    デフォルトインデックスを削除すると、Directory Server の動作にも影響を及ぼすので、慎重に行なってください。



インデックス設定エントリの作成

インデックスが設定されていない属性のインデックスを作成するには、対応するデータベースの設定内にその属性の新しいエントリを作成する必要があります。

インデックス設定エントリの 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

インデックス設定エントリは nsIndex オブジェクトクラスを持ち、nsSystemIndex 属性が必ず存在して、その値が false である必要があります。新しいシステムインデックスを作成することはできません。システムインデックスは、Directory Server によって内部的に定義されているものだけが保持されます。

nsIndexType 属性の値には、指定の属性で維持されるインデックスのリストが含まれます。対応するインデックスを定義するには、前述のいずれかの値を使います。

単一の値 none を使ってその属性のインデックスを明示的に無効にすることもできるので、たとえば、属性のインデックスを一時的に無効にできます。インデックス設定エントリに nsIndexType 属性を含めない場合、すべてのインデックスがデフォルトで維持されます。

オプションの nsMatchingRule 属性には、国際化インデックスの言語照合順序の OID が含まれます。サポートされているロケールと、それに関連する照合順序の OID のリストについては、『Sun ONE Directory Server Reference Manual』の付録 C 「Directory Internationalization」を参照してください。

インデックス設定属性の詳細については、『Sun ONE Directory Server Reference Manual』の第 5 章にある「Default Index Attributes」を参照してください。



インデックスを作成する場合は、属性のエイリアスではなく、基本名を常に使う必要があります。属性の基本名は、スキーマでその属性に一覧表示された最初の名前です。たとえば、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
^D

db2index.pl スクリプトの実行

インデックスエントリを作成する、既存のインデックスエントリにインデックスタイプを追加するか、照合順序を変更する処理が完了したら、db2index.pl スクリプト (Solaris パッケージでは directoryserver db2index-task) を実行して、新しいインデックスを生成します。このスクリプトはサフィックスの内容を読み取り、設定エントリに基づいて指定の属性のインデックスの再生成を行います。

このコマンドの実行中もサーバーを通じてサフィックスの内容を利用できますが、スクリプトの実行が完了するまで検索のインデックス対応は行われません。イ ンデックスの再生成は多くのリソースを消費するタスクであるため、サーバー上のその他の処理のパフォーマンスに影響を生じることがあります。ディレクトリ のサイズにもよりますが、サフィックスの再初期化は通常は 2 つ以上の属性のインデックスの再生成より速く行われます。ただし、初期化中はサフィックスを利用できません。詳細は、「サフィックスの再初期化」を参照してください。

このスクリプトのコマンドは、プラットフォームごとに異なります。

Solaris パッケージ

# /usr/sbin/directoryserver db2index-task

Windows プラットフォーム

cd ServerRoot
bin\slapd\admin\bin\perl slapd-serverID\db2index.pl

その他のインストール

# ServerRoot/slapd-serverID/db2index.pl

次の例は、databaseName に対応するサフィックスに sn インデックスを再生成します。

UNIX シェルスクリプト

# Solaris パッケージ内の Directory Server db2index タスクを使用します
/var/Sun/mps/slapd-example/db2index.pl \
  -D "cn=Directory Manager" -w password -n databaseName -t sn

Windows バッチファイル

C:\Program Files\Sun\MPS\bin\slapd\admin\bin\perl.exe
  C:
\Program Files\Sun\MPS\slapd-example\db2index.pl
    -
D "cn=Directory Manager" -w password -n databaseName -t sn

詳細については、『Sun ONE Directory Server Reference Manual』の第 2 章にある「db2index.pl」を参照してください。

属性のすべてのインデックスの削除

属性に設定されているすべてのインデックスを削除するときは、設定エントリとデータベースファイルを削除します。たとえば次のコマンドは、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 つの方法があります。

サフィックスのインデックスの再生成

サフィックスのインデックスの再生成を行うと、サーバーはサフィックスに含まれるすべてのエントリを調べ、インデックスファイルを再作成します。インデッ クスの再生成時は、サフィックスの内容に対して読み取りと書き込みを実行できます。ただし、インデックスを再生成するすべての属性についてサフィックス全 体をサーバーがスキャンするため、設定するインデックスによっては、数百万のエントリを持つサフィックスでは完了までに最大で数時間かかります。また、イ ンデックスの再生成中はインデックスを利用できず、サーバーのパフォーマンスに影響が生じることもあります。

コンソールからサフィックスのインデックスの再生成を行うには、次の手順を実行します。

  1. Directory Server コンソールの最上位の「設定」タブで「データ」ノードを展開し、インデックスを再生成するサフィックスを表示します。
  2. このサフィックスの設定ノードをマウスの右ボタンでクリックし、ポップアップメニューから「再インデックス」を選択します。あるいは、ノードをマウスの左ボタンでクリックして選択し、「オブジェクト」メニューから「再インデックス」を選択します。
  3. 選択しているサフィックスにインデックスが設定されているすべての属性をリスト表示した「サフィックスを再インデックス」ダイアログが表示されます。

  4. インデックスを再生成する属性の隣にあるチェックボックスを選択します。選択には、「すべてをチェック」、「チェッ クしない」ボタンが役立ちます。属性のすべてのインデックスが同じデータベースファイルに格納されているので、すべてのインデックスを同時に再生成する必 要があります。
  5. 「了解」をクリックします。インデックスの再生成の処理中に予期せぬ検索結果が得られたり、パフォーマンスに影響が生じたりする可能性についてコンソールに確認メッセージが表示されます。
  6. 「はい」をクリックしてインデックスの再生成を開始します。
  7. インデックスの再生成に関するメッセージはダイアログに表示されます。処理が完了したら、ダイアログを閉じます。

コマンド行からサフィックスのインデックスの再生成を行うには、「db2index.pl スクリプトの実行」で説明している手順に従って、インデックスファイルを再作成するすべての属性を指定します。

サフィックスの再初期化

サフィックスを再初期化すると、新しい内容がインポートされてサフィックスの内容が置き換えられ、新しいインデックスファイルが作成されます。サフィック スの再初期化は、エントリのロード時にすべての属性が 1 つのパスでインデックスが作成されるので、通常は複数の属性のインデックスの再生成よりも速く行われます。ただし、再初期化中はサフィックスを利用できま せん。

Directory Server コンソールまたはコマンド行から次のすべての手順を実行できます。

  1. 「アクセス権とリフェラルの設定」で説明している方法で、サフィックスを読み取り専用に設定します。内容をエクスポートした後に変更が加えられないように、最初にサフィックスを書き込み不可に設定する必要があります。
  2. 「コンソールを使用した LDIF への単一サフィックスのエクスポート」で説明している方法で、サフィックス全体を LDIF ファイルにエクスポートします。
  3. 「サフィックスの初期化」で説明している方法で、同じ LDIF ファイルをインポートしてサフィックスを再初期化します。
  4. 初期化中は、サフィックスを利用することはできません。初期化が完了すると、設定されたすべてのインデックスを利用できるようになります。

  5. 「アクセス権とリフェラルの設定」で説明している方法で、サフィックスを書き込み可能に戻します。

デフォルトのインデックスセットの変更

新規サフィックスの作成時に使われるデフォルトのインデックスセットは、次のエントリの下に定義されます。

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

このエントリを追加すると、すべての新しいサフィックスの drink 属性の値には、等価検索と部分文字列の検索がフランス語でインデックス設定されます。

デフォルトのインデックスエントリを変更または削除するには、ldapmodify コマンドまたは ldapdelete コマンドを使って cn=default indexes,cn=config,cn=ldbm database,cn=plugins,cn=config 内のインデックスセットを編集します。

ブラウズインデックスの管理

ブラウズインデックスは、サーバー側のソートまたは VLV (仮想リスト表示) 結果を要求する検索操作のための特別なインデックスです。ブラウズインデックスを利用することで、多数の検索結果をサーバー側でソートするように要求する 検索のパフォーマンスが向上します。ディレクトリの設定によっては、ブラウズインデックスが定義されていない場合にソートを要求する検索の実行をサーバー が拒否することもあります。これにより、大規模なソート処理によってサーバーリソースがオーバロードすることを防止できます。

ブラウズインデックスは、検索のベースとなるエントリに適用され、ソート要求で使用する検索フィルタごとに専用のインデックスを作成する必要があります。 たとえば、クライアントアプリケーションがすべてのユーザーのソートされたリストを頻繁に要求する場合は、クライアントが使用するフィルタ文字列用に ou=People のブラウズインデックスを作成します。

その他のインデックスと同様に、ブラウズインデックスの維持に必要な更新処理の最中は、パフォーマンスに影響が生じます。ブラウズインデックスの導入は慎重に計画し、テストする必要があります。

コンソール用のブラウズインデックス

Directory Server コンソールは、パネルの内容を更新するためにディレクトリ全体を対象に検索処理を頻繁に行います。「ディレクトリツリーの表示オプション」で説明した方法で、ディレクトリツリーに表示されるエントリをソートするようにコンソールを設定したときは、コンソール用のブラウズインデックスを作成する必要があります。

コンソール用のブラウズインデックスは、コンソールが実行する検索に特化されています。これは、コンソールから作成できます。コンソール用のブラウズインデックスを作成するには、次の手順を実行します。

  1. Directory Server コンソールの最上位の「ディレクトリ」タブで、たとえば数千のユーザーエントリを持つ ou=People,dc=example,dc=com のように、ソートが必要な大規模なサブツリーの親を表示します。
  2. この親エントリをマウスの右ボタンでクリックし、ポップアップメニューから「ブラウズインデックスの作成」を選択します。あるいは、エントリをマウスの左ボタンでクリックして選択し、「オブジェクト」メニューから「ブラウズインデックスの作成」を選択します。
  3. 「ブラウズインデックスの作成」ダイアログボックスが開き、インデックス作成の状態が表示されます。コンソールは後述するブラウズインデックス設定エントリを作成し、インデックスファイルの内容を生成します。

  4. 「閉じる」をクリックして、「ブラウズインデックスの作成」ダイアログボックスを閉じます。
  5. 新しいインデックスは、コンソールの更新処理に直ちに適用され、ディレクトリに追加する新しいデータにも対応して維持されます。サーバーを再起動する必要はありません。

コンソール用のブラウズインデックスの設定は、次のエントリから構成されます。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 uid

Directory Server コンソール用のブラウズインデックスを削除するには、次の手順を実行します。

  1. Directory Server コンソールの最上位レベルにある「ディレクトリ」タブでディレクトリツリーを表示し、ブラウズインデックスを作成したエントリを探します。
  2. このエントリをマウスの右ボタンでクリックし、ポップアップメニューから「ブラウズインデックスの削除」を選択しま す。あるいは、エントリをマウスの左ボタンでクリックして選択し、「オブジェクト」メニューから「ブラウズインデックスの削除」を選択します。このメ ニュー項目は、コンソール用のブラウズインデックスのエントリを選択している場合にだけ選択できます。
  3. 「ブラウズインデックスの削除」ダイアログボックスが表示され、インデックスを削除するかどうかの確認が求められます。「はい」をクリックして、ブラウズインデックスを削除します。

クライアント検索用のブラウズインデックス

クライアント検索結果をソートするカスタムブラウズインデックスは、手動で定義する必要があります。コマンド行を使ったブラウズインデックス、または仮想リスト表示 (VLV) の作成は、次の 2 つの手順で行われます。

  • ldapmodify ユーティリティまたは Directory Server コンソールの「ディレクトリ」タブを使って、新しいブラウズインデックスエントリを追加するか、既存のブラウズインデックスエントリを編集します。
  • vlvindex スクリプト (Solaris パッケージ内の directoryserver vlvindex) を実行して、サーバーに保持される新しいブラウズインデックスのセットを生成します。

ブラウズインデックスエントリの指定

ブラウズインデックスは、特定のベースエントリとサブツリーに対して指定された検索ごとに異なります。ブラウズインデックスの設定は、エントリを含むサフィックスのデータベース設定に定義されます。



連鎖サフィックスにブラウズインデックスを作成することはできません。ローカルのサフィックスとサブサフィックスだけに作成できます。



ブラウズインデックスは、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
^D

vlvscope は、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 コマンドの実行

ブラウズインデックスのエントリの作成、または既存エントリの変更が完了したら、vlvindex コマンド (Solaris パッケージでは directoryserver vlvindex) を実行して、新しいブラウズインデックスセットを生成する必要があります。このコマンドは、ディレクトリの内容をスキャンし、ブラウズインデックス用のデータベースファイルを作成します。

ブラウズインデックスを生成するには、次のコマンドを使います。

Solaris パッケージ

# /usr/sbin/directoryserver vlvindex

その他のインストール

# installDir/slapd-serverID/vlvindex

次の例は、前の項で定義したブラウズインデックスを生成します。

# vlvindex -n databaseName -T "Browsing ou=People"

表 10-4    例で使った vlvindex オプションの説明

オプション

内容

-n

インデックスを作成するエントリを含んだ、データベースの名前を指定する

-T

対応するブラウズインデックスの vlvSearch エントリのネーミング属性の値を指定する。指定した vlvSearch エントリの vlvIndex エントリに対応するすべてのインデックスが生成される

詳細については、『Sun ONE Directory Server Reference Manual』の第 2 章にある「vlvindex」を参照してください。


前へ     目次     索引     ドキュメントホーム     次へ    
Copyright 2003 Sun Microsystems, Inc. All rights reserved.