我是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();
为什么它不起作用?感谢。
答案 0 :(得分:0)
我花了半天时间找到解决方案。
只需将hibernate-search版本从 4.1.1 更改为 4.2.0
拦截器按预期工作
答案 1 :(得分:0)
条件索引的初始版本现在可以与质量索引器一起使用。这在Hibernate Search 4.2.0.Final中得到了解决。该问题在https://hibernate.onjira.com/browse/HSEARCH-1190
下进行了跟踪