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

时间:2015-11-03 23:49:02

标签: javascript lucene alfresco

Alfresco版本3.3 -

我正在Alfresco Repository中编写一个JavaScript程序来删除所有已归档的文件(类似于Windows的回收站)。我发现Lucene搜索只返回1000个节点。因此,我的方法是删除它们并再次进行相同的搜索,希望获得另外1000个节点并循环它直到没有搜索结果。但是,从第一个结果中删除后,它返回相同的1000个结果。在再次进行查询之前,我已尝试进行更长和更长的暂停,以防Lucene在删除后需要时间重新索引,甚至长达五分钟。如果我再次运行相同的脚本,它将成功找到1000个现有节点并删除它们,但没有任何过去。

我的猜测是,有一个事务链接到整个JavaScript执行,或者搜索对象缓存搜索并在再次执行相同的查询时返回相同的结果。

有没有人经历过这个?有没有办法让搜索在同一个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();
    }
}

1 个答案:

答案 0 :(得分:1)

您在使用Javascript工作时遇到了Alfresco处理交易的方式。它会将您在Javascript执行中完成的所有更改捆绑到单个事务中,直到它退出为止,将不会提交更改,因此不会更新索引。

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

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

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

它适用于您的版本。

祝你好运, 马修