私は休止状態検索に不慣れであり、アプリケーションデータベースでそれを使用する必要があります。インデックス付きのエンティティクラスがいくつかあり、状態に基づいて一部のエンティティをインデックスから除外したいと思います。テンプレート==nullのオブジェクトを除外したい場合この機能 を見つけて実装しましたが、このインターセプターが機能していません\呼び出しています
これは私が持っているものです
public class WorkDocumentInterceptor implements EntityIndexingInterceptor<WorkDocument> {
@Override
public IndexingOverride onAdd(WorkDocument workDocument) {
System.out.println("on ADD workDocument = " + workDocument.getId());
if (workDocument.getTemplate() == null) {
System.out.println("SKIP DOCUMENT " + workDocument.getId() + ":" + workDocument.getTitle());
return IndexingOverride.SKIP;
}
return IndexingOverride.APPLY_DEFAULT;
}
@Override
public IndexingOverride onUpdate(WorkDocument workDocument) {
if (workDocument.getTemplate() == null) {
return IndexingOverride.REMOVE;
}
return IndexingOverride.UPDATE;
}
@Override
public IndexingOverride onDelete(WorkDocument workDocument) {
return IndexingOverride.APPLY_DEFAULT;
}
@Override
public IndexingOverride onCollectionUpdate(WorkDocument workDocument) {
return onUpdate(workDocument);
}
}
エンティティクラス
@Entity
@Table(name = "work_document")
@Indexed(interceptor = WorkDocumentInterceptor.class)
public class WorkDocument implements Serializable {
@Id
@Basic(optional = false)
@Column(name = "id")
private Long id;
Template template;
...
}
インデックス作成が実行されているとき、この出力も表示されませんが、インターセプターが呼び出していないようです
System.out.println("on ADD workDocument = " + workDocument.getId());
インデックスを再構築するには、これを呼び出します
em.createIndexer(clazz)
.purgeAllOnStart(true)
.optimizeAfterPurge(true)
.optimizeOnFinish(true)
.batchSizeToLoadObjects(25)
.cacheMode(CacheMode.IGNORE)
.threadsToLoadObjects(5)
.threadsForIndexWriter(3)
.threadsForSubsequentFetching(20)
.startAndWait();
なぜそれが機能しないのですか?ありがとう。