第3章 設定
3.1. Directory 構成 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
Apache Lucene には、インデックスファイルを保存する
Directory
の表記が存在します。Directory
実装はカスタマイズできますが、Lucene はファイルシステム (FSDirectoryProvider
) とメモリ内 (RAMDirectoryProvider
) 実装でバンドルされます。DirectoryProvider
は Lucene Directory
を Hibernate Search により抽象化し、基礎となる Lucene リソースの設定と初期化を処理します。表3.1「ビルトインの Directory Provider 一覧」 は Hibernate Search でバンドルされるディレクトリプロバイダのリストを示します。
クラス | 説明 | プロパティ |
---|---|---|
org.hibernate.search.store.RAMDirectoryProvider | メモリベースのディレクトリ。ディレクトリは @Indexed.index エレメントにより一意に (同じデプロイメント単位で) 識別されます。 | none |
org.hibernate.search.store.FSDirectoryProvider | ファイルシステムベースのディレクトリ。使用されるディレクトリは <indexBase>/< indexName > です。 | indexBase : ベースディレクトリ
indexName : @Indexed.index をオーバーライドします (共有されたインデックスの場合に役に立ちます)。
locking_strategy : オプション。「LockFactory の設定」 を参照してください。
|
org.hibernate.search.store.FSMasterDirectoryProvider |
ファイルシステムベースのディレクトリ。FSDirectoryProvider と同様。インデックスを定期的にソースディレクトリ (コピーディレクトリとも呼ばれます) にコピーします。
更新期間の推奨値は情報をコピーする時間よりも大きい (最低) 50%です (デフォルトの 3600 秒 - 60 分)。
コピーは平均コピー時間を短縮する差分コピーメカニズムに基づいています。
DirectoryProvider は通常、JMS バックエンドクラスタのマスターノードで使用されます。
buffer_size_on_copy の最適化は、オペレーティングシステムと利用可能な RAM に依存します。16 〜 64MB の値を使用した場合に良い結果が得られると報告したユーザーがほとんどです。
| indexBase : ベースのディレクトリ
indexName : @Indexed.index をオーバーライドします (共有されたインデックスの場合に役に立ちます)。
sourceBase : ソース (コピー) ベースディレクトリ
source : ソースディレクトリのサフィックス (デフォルト値は @Indexed.index )。実際のソースディレクトリ名は <sourceBase>/<source> です。
refresh : 秒単位の更新期間 (更新期間ごとにコピーが行われます)
buffer_size_on_copy : 単一ローレベルコピー命令で移動する MegaBytes の量。デフォルト値は 16MB です。
locking_strategy : オプション。「LockFactory の設定」 を参照してください。
|
org.hibernate.search.store.FSSlaveDirectoryProvider |
ファイルシステムベースのディレクトリ。FSDirectoryProvider と似ていますが通常でマスターバージョン (ソース) を取得します。ロックと不整合な検索結果を回避するために、2 つのローカルコピーが保持されます。
更新期間の推奨値は情報をコピーする時間よりも大きい (最低) 50%です (デフォルトの 3600 秒 - 60 分)。
コピーは平均コピー時間を短縮する差分コピーメカニズムに基づいています。
DirectoryProvider は通常、JMS バックエンドを使用したスレーブノードで使用されます。
buffer_size_on_copy の最適化は、オペレーティングシステムと利用可能な RAM に依存します。16 〜 64MB の値を使用した場合に良い結果が得られると報告したユーザーがほとんどです。
| indexBase : ベースのディレクトリ
indexName : @Indexed.index をオーバーライドします (共有されたインデックスの場合に役に立ちます)。
sourceBase : ソース (コピー) ベースディレクトリ
source : ソースディレクトリのサフィックス (デフォルト値は @Indexed.index )。実際のソースディレクトリ名は <sourceBase>/<source> です。
refresh : 秒単位の更新期間 (更新期間ごとにコピーが行われます)
buffer_size_on_copy : 単一ローレベルコピー命令で移動する MegaBytes の量。デフォルト値は 16MB です。
locking_strategy : オプション。「LockFactory の設定」 を参照してください。
|
ビルトインのディレクトリプロバイダがニーズに適合しない場合は
org.hibernate.store.DirectoryProvider
インターフェースを実装することで独自のディレクトリプロバイダを記述することができます。
インデックス化された各エンティティは Lucene インデックスに関連付けられます (インデックスは複数のエンティティで共有可能ですが通常は不要です)。
hibernate.search.
indexname でプレフィックスされるプロパティでインデックスを設定することができます。 全インデックスに継承されるデフォルトのプロパティはプレフィックスの hibernate.search.default.
を使用して定義することができます。
特定のインデックスのディレクトリプロバイダを定義するには
hibernate.search.indexname.directory_provider
を使用します。
例3.1 ディレクトリプロバイダの設定
hibernate.search.default.directory_provider org.hibernate.search.store.FSDirectoryProvider hibernate.search.default.indexBase=/usr/lucene/indexes hibernate.search.Rules.directory_provider org.hibernate.search.store.RAMDirectoryProvider
hibernate.search.default.directory_provider org.hibernate.search.store.FSDirectoryProvider
hibernate.search.default.indexBase=/usr/lucene/indexes
hibernate.search.Rules.directory_provider org.hibernate.search.store.RAMDirectoryProvider
以下に適用します。
例3.2 @Indexed
の index
パラメータを使用したインデックス名の指定
@Indexed(index="Status") public class Status { ... } @Indexed(index="Rules") public class Rule { ... }
@Indexed(index="Status")
public class Status { ... }
@Indexed(index="Rules")
public class Rule { ... }
すると、 Status エンティティがインデックス化される
/usr/lucene/indexes/Status
内にファイルシステムディレクトリを作成し、 Rule エンティティがインデックス化される Rules
という名前のインメモリディレクトリを使用します。
ディレクトリプロバイダやベースディレクトリのような共通のルールを容易に定義して、 あとでこれらのデフォルト値をインデックスごとに上書きすることができます。
独自の
DirectoryProvider
を記述すると、 この設定メカニズムを利用することもできます。