【发布时间】:2020-10-01 11:13:21
【问题描述】:
我有一个巨大的表,我使用 Hibernate Search 版本 5.11.5 将其写入 Lucene 索引。将(现有)原始 SQL 导入此表后,我必须手动更新搜索索引。此 SQL 导入每天运行多次,并且重新索引不应阻止传入的搜索请求超过几秒钟。
在每个实体上都存在一个“已修改”日期字段,所以我已经使用 EntityIndexingInterceptor 注释了这个 @Indexed 实体,如下所示:
public class CustomEntityIndexingInterceptor implements EntityIndexingInterceptor<HugeTableEntity> {
public static Date lastModified = //some logic;
@Override
public IndexingOverride onAdd(HugeTableEntity entity) {
return IndexingOverride.APPLY_DEFAULT;
}
@Override
public IndexingOverride onUpdate(HugeTableEntity entity) {
if (entity.getModified().after(lastModified)) {
return IndexingOverride.APPLY_DEFAULT;
}
return IndexingOverride.SKIP;
}
}
此代码有效,但重新索引需要很长时间,因为所有实体都已加载。只有
我看到在 Hibernate Search 的深处存在一个类 IdentifierProducer,它在方法 loadAllIdentifiers 中加载所有 ID。我很想在内部条件中添加一个 SQL 过滤器 - 例如“修改位置 > :given_date”。
你知道我是否可以在不复制所有代码的情况下自定义 IdentifierProducer 吗?你知道解决我问题的另一种聪明方法吗?
问候
【问题讨论】:
标签: hibernate-search