1

私は休止状態検索に不慣れであり、アプリケーションデータベースでそれを使用する必要があります。インデックス付きのエンティティクラスがいくつかあり、状態に基づいて一部のエンティティをインデックスから除外したいと思います。テンプレート==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();

なぜそれが機能しないのですか?ありがとう。

4

2 に答える 2

0

解決策を見つけるのに半日を費やしました。

hibernate-search のバージョンを4.1.1から4.2.0に変更するだけです

インターセプターは期待どおりに動作します

于 2013-01-30T14:39:06.810 に答える
0

条件付きインデックス作成の初期バージョンは、マス インデクサーで動作するようになりました。これは Hibernate Search 4.2.0.Final で対処されました。この問題は、https://hibernate.onjira.com/browse/HSEARCH-1190で追跡されています。

于 2013-01-31T10:42:06.093 に答える