繁体   English   中英

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

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

Alfresco版本3.3-

我在Alfresco储存库中编写了一个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();
    }
}

您正在探究Alfresco如何使用Javascript处理事务。 它将在Javascript执行过程中完成的所有更改捆绑到一个事务中,直到退出为止,更改不会被提交,因此索引也不会更新。

据我所知,批量清除存档的唯一方法是使用Java之类的东西,您可以对事务进行显式控制。 但是,如果您使用SOLR之类的东西,因为索引是异步的,则可能会更加复杂。 既然您说过使用3.4,则必须使用lucene,这不会成为问题,因为在提交索引更改之前,API不会将控制权返回给您。

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

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

它应该适合您的版本。

最好的问候,马修

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM