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 { ... }
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
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> を使用して追加のプロパティーを渡すことができ ます。