Sun Java System Communications Services 2005Q4 リリースノート

インターナショナル検索の設定

Communications Express と Microsoft Outlook 版 Connector のどちらを使用していても、個人用連絡先や公開アドレス帳で特定の文字列を検索するのは、ロケール固有の処理となります。たとえば、フランス語のユーザーが「Gaelle」を検索して「Gaelle」という文字列を含むエントリを取得しようとすると、「Gaëlle」という文字列を含むエントリまで取得されます。

ユーザーに対するロケールに基づいたエントリの表示方法を規定するさまざまな規則を、照合規則または照合順序と呼びます。照合順序によって、該当の言語の文字をソートする方法についての言語と文化に固有の情報が提供されます。アルファベット文字の並び順のような規則、アクセントを持つ文字とアクセントを持たない文字の比較方法、および文字列の比較時に無視できる文字の有無が定められます。また照合順序には、言語に関して文化に固有の情報が考慮されています。たとえば、文字方向 (左から右へ、右から左へ、または上から下へ) などです。

Sun Java System Directory Server では広範囲のロケールと照合規則をサポートしています (『Sun Java System Directory Server 5 2005Q1 Administration Reference』の「Identifying Supported Locales」を参照)。ユーザーベースによっては、使用環境のほとんどの部分に影響を与えるロケールを最初に選択する必要があります。次に示す例では、英語 (US) ロケール (OID = 1.3.6.1.4.1.42.2.27.9.4.34.1) を使用します。

検索の実行時に使用するロケールを指定するには、『Sun Java System Directory Server 5 2005Q1 Administration Reference』の「Searching an Internationalized Directory」に記載されているマッチングルールフィルタ構文を使用します。この構文を使用すると、ローケルだけでなく検索の種類 (等価、部分文字列など) も指定できます。

たとえば、次のフィルタを使用すると、英語 (US) の照合規則 (1.3.6.1.4.1.42.2.27.9.4.34.1) を使い、CN 属性に対して部分文字列の比較 (.6) が実行されます。このフィルタは、「Gae」で始まる文字列を CN で検索します。

cn:1.3.6.1.4.1.42.2.27.9.4.34.1.6:=Gae*

インデックスの更新

LDAP 検索の実行時に発生するパフォーマンスに関する問題のほとんどは、インデックスが存在しないか、正しく設定されていないことが原因です。デフォルトでは、Directory Server は Communications Express または Microsoft Outlook 版 Connector が発行した検索ではインデックスを使用するように設定されているため、妥当な時間内に結果が返されます。しかし、Directory Server はインターナショナル検索に対応するように設定されていません。そのため、選択されている照合規則に対応するように既存のインデックスを変更する必要があります。これについては、『Sun Java System Directory Server 5 2005Q1 Administration Guide』の「インデックスの管理」に説明されています。

たとえば、CN 属性はデフォルトで userRoot サフィックスにインデックス設定されています。

# ldapsearch -D "cn=Directory manager" -b 
"cn=cn,cn=index,cn=userRoot,cn=ldbm database,cn=plugins,cn=config" 
"objectclass=*" 
cn=cn,cn=index,cn=userRoot,cn=ldbm database,cn=plugins,cn=config 
objectClass=top objectClass=nsIndex 
cn=cn 
nsSystemIndex=false 
nsIndexType=pres 
nsIndexType=eq 
nsIndexType=sub

これを英語 (US) の照合規則を使用したインターナショナル検索で有効にするには、英語 (US) の OID を持つ nsMatchingRule 属性を 1 つ追加します。クライアントは部分文字列検索を実行するので、次のように部分文字列サフィックス (「.6」) を OID に追加する必要があります。

#ldapmodify -D "cn=Directory manager"
dn: cn=cn,cn=index,cn=userRoot,cn=ldbm database, 
 cn=plugins,cn=config
changetype: modify
add: nsMatchingRule
nsMatchingRule: 1.3.6.1.4.1.42.2.27.9.4.34.1.6 

注 –

値の先頭または末尾に、スペース、タブ、その他表示されない文字を追加しないでください。



注 –

nsMatchingRule は、複数の値を設定できる属性です。同一の OID に対して異なる種類の検索を追加することや、異なる OID を追加することができます。


その後、 serverroot/slapd-instance に格納されている db2index.pl スクリプトを実行する必要があります。

# perl db2index.pl -D "cn=Directory Manager" -w \ 
secret -n userRoot -t cn

この操作はオンラインで実行されますが、終了までに時間がかかることがあります。または、サフィックスを再初期化することもできます。詳細については、『Sun Java System Directory Server 5 2005Q1 Administration Guide』の「サフィックスの再初期化」を参照してください。

コンソールを使用して nsMatchingRule を追加することもできます (『Sun Java System Directory Server 5 2005Q1 Administration Guide』の「インデックスの管理」を参照)。

修正の必要があるインデックスのリストを次に掲載します。インデックスを使用しない検索は実行されないことを確認してください。これは、Directory Server のアクセスログファイルを参照し、検索結果のエントリで notes=U を探すことで確認できます。

Communications Express での検索フィルタの設定

Communications Express が使用する検索フィルタを、マッチングルールの構文に適合するように変更する必要があります。それには、db_config.properties ファイルで指定される照合規則のパラメータを有効にします。このファイルは、 deployed-path/WEB-INF/ldappstore (個人ストア用) および deployed-path/WEB-INF/corp-dir (企業ディレクトリ用) に格納されています。

パラメータの内容は次のとおりです。

# Collation Rule
# Uncomment below to apply collation rule

# collation_rule=en-US

# Search Fields for which collation rule should be applied.
# The fields provided here should be disambiguator formatted fields
# e.g. entry/displayname, person/givenname etc.
# Uncomment below to supply the comma-separated fields

# search_fields=entry/displayname

照合規則を有効にするには、collation_rule パラメータと search_fields パラメータをアンコメントにします。検索で個別のフィールドやフィールドセットを指定するには、search_fields の値を適切な値に変更します。collation_rule には、検索の種類を示すサフィックスなしで、言語タグまたはその言語に対応する OID (例では 1.3.6.1.4.1.42.2.27.9.4.34.1) のどちらかを格納できます。変更後に Web コンテナインスタンスを起動する必要があります。

Communications Express に対するインターナショナル検索には、LDAP サーバー上で次の属性のインデックスを作成してください。