java - hibernate 搜索。如何从索引中排除实体?

标签 java hibernate interceptor hibernate-search

我是 hibernate 搜索新手,我需要将它与我的应用程序数据库一起使用。 我有几个索引实体类,我想根据状态从索引中排除一些实体。我的情况是,我想排除带有 template == null 的对象,我发现 this feature并实现了它,但这个拦截器不工作\调用

这就是我所拥有的

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();

为什么不起作用?谢谢。

最佳答案

条件索引的初始版本现在可以与质量索引器一起使用。这个问题在 Hibernate Search 4.2.0.Final 中得到了解决。该问题在 https://hibernate.onjira.com/browse/HSEARCH-1190 下跟踪

关于java - hibernate 搜索。如何从索引中排除实体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14602029/

相关文章:

java - 在 TextView 中显示来自 SQLite 的项目

java - Citrus Test Framework 消息存储不保存消息

java - 是否要延迟加载以努力提高性能

java - 自定义类型/转换器与 Hibernate 的 Transformers.aliasToBean 结合使用

java - Hibernate 和带有枚举的映射

java - Spring JPA/Hibernate org.hibernate.AssertionFailure : null id in Entity (don't flush the Session after an exception occurs)

java - 并发还是顺序?

java - 无法打开链接作为后台选项卡 - Java、Selenium、IE

javascript - Angular.js $http 拦截 "net::ERR_CONNECTION_REFUSED"

java - 如何将 CDI 拦截器创建为单例?