14.5. インデックスの最適化
時折、Lucene インデックスを最適化する必要があります。このプロセスは基本的にはデフラグです。最適化がトリガーされるまで、Lucene は削除されたドキュメントのみをマークします。物理的には適用されません。最適化プロセス中に削除が適用され、Lucene ディレクトリー内のファイル数にも影響を及ぼします。
Lucene インデックスを最適化すると検索が高速になりますが、インデックス化 (更新) パフォーマンスには影響はありません。最適化中に検索を実行できますが、おそらく遅くなる可能性があります。インデックスの更新はすべて停止します。最適化のスケジュール設定が推奨されます。
- アイドル状態のシステムの場合、または検索が頻繁に行われない場合
- 多数のインデックス変更が適用された後。
MassIndexer
(「MassIndexer の使用」 を参照) は、デフォルトで、開始時と処理終了時にインデックスを最適化します。MassIndexer
を使用します。optimizeAfterPurge
および MassIndexer
。optimizeOnFinish
このデフォルトの動作を変更します。
14.5.1. 自動最適化
Hibernate Search は、以下のいずれかの後にインデックスを自動的に最適化できます。
- 一定量の操作 (挿入または削除)。
- 一定量のトランザクション。
インデックスの自動最適化の設定は、グローバルまたはインデックスごとに定義できます。
例14.67 自動最適化パラメーターの定義
hibernate.search.default.optimizer.operation_limit.max = 1000 hibernate.search.default.optimizer.transaction_limit.max = 100 hibernate.search.Animal.optimizer.transaction_limit.max = 50
最適化は、以下のいずれかの時点で
Animal
インデックスに対してトリガーされます。
- 追加および削除の数は
1000
に到達します。 - トランザクション数は
50
に達します (hibernate.search.Animal.optimizer.transaction_limit.max
優先するhibernate.search.default.optimizer.transaction_limit.max
)。
これらのパラメーターが定義されていないと、最適化は自動的に処理されません。
OptimizerStrategy のデフォルト実装は、
org.hibernate.search.store.optimization.OptimizerStrategy
を実装して上書きし、optimizer.implementation
プロパティーを実装の完全修飾名に設定して上書きできます。この実装は、インターフェースを実装し、パブリッククラスであり、引数なしでパブリックコンストラクターを持つ必要があります。
例14.68 カスタム OptimizerStrategy のロード
hibernate.search.default.optimizer.implementation = com.acme.worlddomination.SmartOptimizer hibernate.search.default.optimizer.SomeOption = CustomConfigurationValue hibernate.search.humans.optimizer.implementation = default
キーワード
default
を使用すると、Hibernate Search のデフォルト実装を選択できます。.optimizer
キーセパレーター以降のすべてのプロパティーは、起動時に実装の initialize
メソッドに渡されます。