Alfresco - 试图删除文件,但 Lucene 搜索不断返回相同的 1000 个结果,包括已删除的节点

Alfresco - Attempting to delete files, but Lucene search keeps returning same 1000 results including deleted nodes

A​​lfresco 版本 3.3 -

我正在 Alfresco 存储库中编写一个 JavaScript 程序来删除所有存档文件(类似于 Windows' 回收站的位置)。我发现 Lucene 仅搜索 returns 1000 个节点。所以,我的方法是删除它们并再次进行相同的搜索以希望获得另外 1000 个节点并循环它直到没有搜索结果。但是,在我从第一个结果中删除后,它 returns 相同的 1000 个结果。我已经尝试在再次执行查询之前放置越来越长的暂停,以防 Lucene 在删除后需要时间重新编制索引,甚至长达五分钟。如果我再次 运行 相同的脚本,它将成功找到 1000 个现有节点并删除它们,但除此之外什么都没有。

我的猜测是,要么有一个事务链接到整个 JavaScript 执行,要么搜索对象缓存了搜索,并且 returns 再次执行相同查询时会得到相同的结果。

有人遇到过这种情况吗?有没有办法让搜索在同一次 JavaScript 执行中第二次工作?

下面是尝试删除 2000 个节点的片段:

var query = 'ASPECT:"sys:archived"';
var results = search.luceneSearch('archive://SpacesStore/',query);
for(var i=0;i<results.length;i++){
    if(search.findNode(results[i].nodeRef)!=null){  
        results[i].remove();
    }
}
results = search.luceneSearch('archive://SpacesStore/',query);
for(var i=0;i<results.length;i++){
    if(search.findNode(results[i].nodeRef)!=null){  
        results[i].remove();
    }
}

您 运行 了解 Alfresco 在 Java 脚本中工作时如何处理事务。它会将您在 Java 脚本执行中完成的所有更改捆绑到一个事务中,并且在它退出之前不会提交更改,因此不会更新索引。

据我所知,批量清理存档的唯一方法是使用类似 Java 的方法,您可以在其中明确控制事务。如果您使用 SOLR 之类的东西,这可能会更加复杂,因为索引是异步的。既然你说你在 3.4 中,你必须使用 lucene,这不是问题,因为 API 在提交索引更改之前不会 return 控制你。

垃圾桶管理的两个技巧:如果您以编程方式进行删除,请应用 sys:temporary 方面,这样您就可以跳过垃圾桶步骤。还有一个很棒的 AMP,它基于 Java,可以在后台清理垃圾桶。

https://addons.alfresco.com/addons/trashcan-cleaner

它应该适用于您的版本。

此致, 马修