エンティティ クラスの 1 つで条件付きインデックス作成を使用して Hibernate Search を使用しています。そのエンティティーの@Indexed
アノテーションは、特定の状態のインスタンスが索引付けされないようにするカスタム・インターセプターを指定します。
これは期待どおりに完全に機能しています。MassIndexer
ただし、a を使用してすべてのインデックスを再作成すると、そのエンティティ クラスのカスタム インターセプターが無視されることに気付きました。インターセプターが呼び出されることさえなく、スキップされる基準に適合する場合でも、そのエンティティのすべてのインスタンスにインデックスが作成されることをデバッグ モードで確認しました。
何か不足していますか?エンティティクラスでカスタムインターセプターを利用する Hibernate Search で再インデックスする方法はありますか?
アップデート
このコードスニペットを使用して、Sanne が提案した「古いスタイル」のアプローチに切り替えてみました。
FullTextSession fullTextSession = Search.getFullTextSession(session);
fullTextSession.setFlushMode(FlushMode.MANUAL);
fullTextSession.setCacheMode(CacheMode.IGNORE);
fullTextSession.beginTransaction();
// Kill the current index
fullTextSession.purgeAll(MyEntity.class);
int batchSize = 10;
ScrollableResults results = fullTextSession.createCriteria(MyEntity.class)
.setFetchSize(batchSize)
.scroll(ScrollMode.FORWARD_ONLY);
int index = 0;
while(results.next()) {
// Re-index entites in batches of 10, freeing up memory after each batch
index++;
fullTextSession.index(results.get(0));
if (index % batchSize == 0) {
fullTextSession.flushToIndexes();
fullTextSession.clear();
}
}
fullTextSession.getTransaction().commit();
ただし、 とまったく同じ動作が見られMassIndexer
ます。条件付きマッピング インターセプター onMyEntity
は呼び出されず、すべてのMyEntity
インスタンスはインデックス化されるかどうかにかかわらずインデックス化されます。