dp2 icon indicating copy to clipboard operation
dp2 copied to clipboard

dp2library 批处理任务“重建检索点”改进

Open DigitalPlatform opened this issue 3 years ago • 1 comments

最近发现 dp2library 批处理任务“重建检索点”无法清除那些已经被删除的记录的检索点。

这是由于原有的算法缺陷造成的。算法遍历数据库内的全部记录,调用 dp2kernel 的 RebuildKey() API,但那些已经被删除掉的记录就没法被处理。并且,即便能处理这些记录,dp2kernel 当前版本的 RebuildKey() API 在发现记录不存在的时候就会报错返回,无法把清理检索点的任务完成。

dp2kernel 目前正在重构阶段。已经改进了 RebuildKey() API,使其可以处理删除了的记录,清理它可能残留的检索点。

dp2library 也改进了重建检索点的代码,增加了一个步骤,将“全部”途径检索命中的 ID 集合,减去"__id"途径检索命中的 ID 集合,得到的结果集就是那些被删除的、依然残留了检索点的记录 ID。遍历这些 ID,调用 RebuildKey() API 把残留的检索点清除。但因为 dp2kernel 重构还没有完成,暂时没有启用此功能。等 dp2kernel 重构完成后,再正式启用此功能。

DigitalPlatform avatar Feb 22 '22 14:02 DigitalPlatform

绕过问题的方法

在目前有问题的 dp2library 版本上,似可以考虑先在已经删除的 ID 位置创建一条记录,然后再进行一次重建检索点。然后再删除这条记录,即可解决检索点残留问题。

DigitalPlatform avatar Feb 22 '22 14:02 DigitalPlatform