gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 08:26:53 25 4
gpt4 key购买 nike

露天版本 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();
}
}

最佳答案

您正在了解 Alfresco 在使用 Javascript 时如何处理事务。它将把在 Javascript 执行内部完成的所有更改捆绑到单个事务中,并且在退出之前,更改不会被提交,因此索引不会更新。

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

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

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

它应该适用于您的版本。

最诚挚的问候,马修

关于javascript - Alfresco - 尝试删除文件,但 Lucene 搜索不断返回相同的 1000 个结果,包括已删除的节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33511310/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com