Red Hat Training

A Red Hat training course is available for Red Hat JBoss Enterprise Application Platform

23.2.3. DirectoryProvider の設定

DirectoryProvider は、Lucene Directory に関する Hibernate Search 抽象化で、基礎となる Lucene リソースの設定および初期化を処理します。 ディレクトリープロバイダーおよびそのプロパティー は、Hibernate Search で利用可能なディレクトリープロバイダーと、対応するオプションの一覧を表示します。
インデックス化された各エンティティーは Lucene インデックスに関連付けられます (複数のエンティティーが同じインデックスを共有している場合を除きます)。インデックスの名前は、@Indexed アノテーションの index プロパティーによって指定されます。index プロパティーが指定されていない場合、インデックス化されたクラスの完全修飾名が名前として使用されます(推奨)。
DirectoryProvider および追加のオプションは、接頭辞 hibernate.search.<indexname> を使用して設定できます。名前 default (hibernate.search.default)は予約されており、すべてのインデックスに適用されるプロパティーを定義するために使用できます。例23.2「ディレクトリープロバイダーの設定」 は、hibernate.search.default.directory_provider を使用してデフォルトのディレクトリープロバイダーをファイルシステムに設定する方法を示しています。hibernate.search.default.indexBase 次に、インデックスのデフォルトベースディレクトリーを設定します。その結果、エンティティー Status のインデックスが /usr/lucene/indexes/org.hibernate.example.Status に作成されます。
ただし、Rule エンティティーのインデックスは、このエンティティーのデフォルトディレクトリープロバイダーはプロパティー hibernate.search.Rules.directory_provider によって上書きされるため、インメモリーディレクトリーを使用しています。
最後に、アクション エンティティーは、hibernate.search.Actions.directory_provider で指定されたカスタムディレクトリープロバイダー CustomDirectoryProvider を使用します。

例23.1 インデックス名の指定

package org.hibernate.example;

@Indexed
public class Status { ... }

@Indexed(index="Rules")
public class Rule { ... }

@Indexed(index="Actions")
public class Action { ... }

例23.2 ディレクトリープロバイダーの設定

hibernate.search.default.directory_provider = filesystem
hibernate.search.default.indexBase=/usr/lucene/indexes
hibernate.search.Rules.directory_provider = ram
hibernate.search.Actions.directory_provider = com.acme.hibernate.CustomDirectoryProvider
注記
上記の設定スキームを使用すると、ディレクトリープロバイダーやベースディレクトリーなどの一般的なルールを簡単に定義でき、これらのデフォルトをインデックスごとに後で上書きできます。

ディレクトリープロバイダーおよびそのプロパティー

ram
None
Filesystem
ファイルシステムベースのディレクトリー使用されるディレクトリーは <indexBase> /< indexName > です。
  • indexBase : ベースディレクトリー
  • indexName: @Indexed.index を上書きします(シャードインデックスに役立ちます)。
  • locking_strategy : optional、を参照してください。 「LockFactory 設定」
  • filesystem_access_type: は、この DirectoryProvider で使用される FSDirectory 実装の正確なタイプを判断できるようにします。許可される値は auto (デフォルト値、非 Windows システムの NIOFSDirectory、Windows の SimpleFSDirectory )、Simple(SimpleFSDirectory)、nio (NIOFSDirectory)、mmap (MMapDirectory)です。この設定を変更する前に、これらの ディレクトリー 実装の Javadocs を参照してください。NIOFSDirectory または MMapDirectory でも、パフォーマンスが大幅に向上しますが、問題も向上します。
filesystem-master
ファイルシステムベースのディレクトリーfilesystem と類似しています。また、定期的にインデックスをソースディレクトリー(コピーディレクトリー) にコピーします。
更新期間に推奨される値は (最低 50%)、情報をコピーする時間 (デフォルトは 3600 秒 - 60 分) です。
コピーは、増分コピーメカニズムをベースにしているため、コピーの平均時間が短縮されることに注意してください。
DirectoryProvider は通常、JMS バックエンドクラスターのマスターノードで使用されます。
buffer_size_on_copy optimum は、オペレーティングシステムと利用可能な RAM によって異なります。ほとんどのユーザーは、16 MB から 64 MB までの値を使用して適切な結果を報告しました。
  • indexBase: ベースディレクトリー
  • indexName: @Indexed.index を上書きします(シャードインデックスに役立ちます)。
  • sourceBase: ソース(コピー)ベースディレクトリー。
  • source: ソースディレクトリーのサフィックス(デフォルトは @Indexed.index)。実際のソースディレクトリー名は < sourceBase>/<source> です。
  • 更新: 更新期間を秒単位で行います(コピーは refresh 秒ごとに行われます)。以下の refresh 期間が経過してもコピーが進行中であれば、2 番目のコピー操作が省略されます。
  • buffer_size_on_copy: 単一の低レベルのコピー命令で移動する MegaBytes の量。デフォルトは 16MB です。
  • locking_strategy : optional、を参照してください。 「LockFactory 設定」
  • filesystem_access_type: は、この DirectoryProvider で使用される FSDirectory 実装の正確なタイプを判断できるようにします。許可される値は auto (デフォルト値、非 Windows システムの NIOFSDirectory、Windows の SimpleFSDirectory )、Simple(SimpleFSDirectory)、nio (NIOFSDirectory)、mmap (MMapDirectory)です。この設定を変更する前に、これらの ディレクトリー 実装の Javadocs を参照してください。NIOFSDirectory または MMapDirectory はパフォーマンスを大幅に向上させる可能性がありますが、問題もあるため、認識する必要があります。
filesystem-slave
ファイルシステムベースのディレクトリーfilesystem と似ていますが、マスターバージョン (ソース) を定期的に取得します。ロックおよび一貫性のない検索結果を避けるため、2 つのローカルコピーが維持されます。
更新期間に推奨される値は (最低 50%)、情報をコピーする時間 (デフォルトは 3600 秒 - 60 分) です。
コピーは、増分コピーメカニズムをベースにしているため、コピーの平均時間が短縮されることに注意してください。refresh の期間が経過してもコピーが進行中であれば、2 番目のコピー操作が省略されます。
DirectoryProvider は通常、JMS バックエンドを使用するスレーブノードで使用されます。
buffer_size_on_copy optimum は、オペレーティングシステムと利用可能な RAM によって異なります。ほとんどのユーザーは、16 MB から 64 MB までの値を使用して適切な結果を報告しました。
  • indexBase: ベースディレクトリー
  • indexName: @Indexed.index を上書きします(シャードインデックスに役立ちます)。
  • sourceBase: Source(copy)ベースディレクトリー。
  • Source : ソース ディレクトリーのサフィックス(デフォルトは @Indexed.indexです)。実際のソースディレクトリー名は < sourceBase>/<source> です。
  • 更新: 更新期間を秒単位で行います(コピーは更新の秒数ごとに行われます)。
  • buffer_size_on_copy: 単一の低レベルのコピー命令で移動する MegaBytes の量。デフォルトは 16MB です。
  • locking_strategy : optional、を参照してください。 「LockFactory 設定」
  • retry_marker_lookup : optional。デフォルトは 0 です。Hibernate Search がソースディレクトリーのマーカーファイルをチェックする回数を定義します。試行ごとに 5 秒待機します。
  • retry_initialize_period : オプション。再試行初期化機能を有効にするには、整数値を秒単位で設定します。スレーブがマスターインデックスを見つけられない場合、アプリケーションが起動するのを妨げずにバックグラウンドで見つかったまで再試行します。インデックスが初期化される前に実行された完全なText クエリーはブロックされませんが、空の結果が返されます。オプションを有効にしない、または明示的にゼロに設定すると、再試行タイマーのスケジュール設定ではなく、例外により失敗します。無効なインデックスなしでアプリケーションが起動しないようにし、初期化のタイムアウトを制御するには、代わりに retry_marker_lookup を参照してください。
  • filesystem_access_type: は、この DirectoryProvider で使用される FSDirectory 実装の正確なタイプを判断できるようにします。許可される値は auto (デフォルト値、非 Windows システムの NIOFSDirectory、Windows の SimpleFSDirectory )、Simple(SimpleFSDirectory)、nio (NIOFSDirectory)、mmap (MMapDirectory)です。この設定を変更する前に、これらの ディレクトリー 実装の Javadocs を参照してください。NIOFSDirectory または MMapDirectory により、パフォーマンスが大幅に向上しますが、問題を認識する必要もあります。
注記
組み込みディレクトリープロバイダーがニーズに適さない場合は、org.hibernate.store.DirectoryProvider インターフェースを実装することで独自のディレクトリープロバイダーを作成できます。この場合、プロバイダーの完全修飾クラス名を directory_provider プロパティーに渡します。プレフィックス hibernate.search.<indexname> を使用して追加のプロパティーを渡すことができ ます。