第6章 手動インデックス化
6.1. インデックス化 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
エンティティがデータベースに対して挿入または更新されない場合でもエンティティのインデックス化が役に立つ場合があります。 これは、たとえば、初めてインデックスを構築する場合に該当します。これは、
FullTextSession
.index()
を使用して実行できます。
例6.1 FullTextSession.index()
を使用したエンティティのインデックス化
効率を最大化するために、Hibernate Search はインデックス操作をバッチ処理し、コミット時に実行します。ただし、たくさんのデータをインデックス化する場合は、トランザクションのコミット時まですべてのドキュメントがキューに保持されるため、メモリ消費について気を付ける必要があります。
OutOfMemoryException
が発生することがあります。この例外を回避するには、fullTextSession.flushToIndexes()
を使用します。fullTextSession.flushToIndexes()
が呼び出されるたびに (または、トランザクションがコミットされる場合)、バッチキューが処理され (メモリが解放される) すべてのインデックスの変更が適用されます。破棄された変更はロールバックできないことに注意してください。
注記
hibernate.search.worker.batch_size
は廃止され、より適切に制御できるこの明示的な API に取って代わりました。
インデックス化時間とメモリ消費に影響を与える可能性がある他のパラメータは以下のとおりです。
hibernate.search.[default|<indexname>].indexwriter.[batch|transaction].max_buffered_docs
hibernate.search.[default|<indexname>].indexwriter.[batch|transaction].max_field_length
hibernate.search.[default|<indexname>].indexwriter.[batch|transaction].max_merge_docs
hibernate.search.[default|<indexname>].indexwriter.[batch|transaction].merge_factor
hibernate.search.[default|<indexname>].indexwriter.[batch|transaction].ram_buffer_size
hibernate.search.[default|<indexname>].indexwriter.[batch|transaction].term_index_interval
これらのパラメータは Lucene 固有であり、 Hibernate Search はこれらのパラメータを単に渡します。詳細については、「Lucene インデックス化パフォーマンスのチューニング」 を参照してください。
例6.2 特定のクラスを効率的にインデックス化 (インデックスの (再) 初期化に有用)
アプリケーションのメモリが足りなくならないバッチサイズをい使用してみてください。