Alfresco 如何使用CMIS查询获取1000多个文档

Alfresco 如何使用CMIS查询获取1000多个文档,alfresco,alfresco-webscripts,opencmis,Alfresco,Alfresco Webscripts,Opencmis,通过使用CMIS查询,我只能获取1000个文档。但是我想获取存储库中所有可用的文档 我读了一些关于这方面的解决方案,我们可以在repository.properties文件中进行一些配置并获取文档 但这里我的问题是,我们可以通过CMIS中的代码来实现吗,因为我正在访问生产存储库。为了在repository.properties文件中进行更改,我需要业务用户提供一些停机时间。就我而言,这是不可能的 因此,我正在寻找一些编程解决方案 有人能帮我吗 提前谢谢 我认为这是由于存储库的配置 尝试将此添加到

通过使用CMIS查询,我只能获取1000个文档。但是我想获取存储库中所有可用的文档

我读了一些关于这方面的解决方案,我们可以在repository.properties文件中进行一些配置并获取文档

但这里我的问题是,我们可以通过CMIS中的代码来实现吗,因为我正在访问生产存储库。为了在repository.properties文件中进行更改,我需要业务用户提供一些停机时间。就我而言,这是不可能的

因此,我正在寻找一些编程解决方案

有人能帮我吗


提前谢谢

我认为这是由于存储库的配置

尝试将此添加到/shared/classes/alfresco-global.properties中,然后重新启动:

  • system.acl.maxPermissionCheckTimeMillis=25000
  • system.acl.maxPermissionChecks=3500
如果您使用的是solr,也可以添加以下内容:

  • solr.query.maximumResultsFromUnlimitedQuery=3500
您可以在此处找到帮助:


我给您的解决方案与查询或页面大小无关,您可以按照以下步骤操作(我曾经遇到过同样的问题,这个问题对我很有效)

创建一个保护程序类

saver类是一个Java类,它保存有关存储库的最重要信息(当我谈到存储库时,我指的是文件夹+文件)

您必须在saver类中使用的信息

1-名称

2-路径(您将构建它)

3-露天ID

使用递归函数

此函数将所有树打包并保存saver类中的每个元素,如下所示

public void getTree(Tree<FileableCmisObject> tree, SaverClass father, String serverURL, String login, String password) {

    SaverClass enr = new SaverClass ();
    enr.setName(tree.getItem().getName());

    if ((father.getPath()).equals("/")) /// IN CASE IT'S THE ROOT
    {
        enr.setPath("/" + tree.getItem().getName());

    } else {
        enr.setPath(father.getPath() + "/" + tree.getItem().getName());
    }        
    enr.setFather(father.getNom());
    for (Tree<FileableCmisObject> t : tree.getChildren()) {
        getTree(t, enr, serverURL, login, password);
    }

}
public void getTree(树树、SaverClass父、字符串服务器URL、字符串登录、字符串密码){
SaverClass enr=新的SaverClass();
enr.setName(tree.getItem().getName());
if((father.getPath()).equals(“/”)///如果是根
{
enr.setPath(“/”+tree.getItem().getName());
}否则{
enr.setPath(父.getPath()+“/”+树.getItem().getName());
}        
enr.setFather(father.getNom());
for(树t:Tree.getChildren()){
getTree(t、enr、serverURL、登录名、密码);
}
}
保存列表中的所有元素后,只需对列表中的每个元素使用迁移方法(如果要使用Alfresco ID,则可以;如果要使用路径,则可以)


希望这对你有帮助

为什么不使用分页,并获取1000个块?这将大大减轻工作压力repository@Gagravarr我对寻呼没什么概念。它会给我存储库中的所有结果吗。如果可能的话,您能提供一些示例代码和将其用于CMIS的一些步骤吗。。谢谢,虽然我们不知道您是如何使用CMIS的,但我们能做的并不多。我们需要看一些代码!例如,使用PortCMIS为.Net执行此操作的方式与使用Python和cmislib的方式有很大不同example@Gagravarr我正在使用JavaCMIS。我可以提供源代码吗。如果你愿意,我可以修改这个问题,我将添加我正在使用的代码。我曾经遇到过同样的问题,我已经用另一种方法解决了它。为什么,你感兴趣吗?!?事实上,我在多个地方找到了这个答案,但我想通过我的cmis代码做同样的事情,而不去碰露天。可能吗???不,不可能。您可以更改这些值,或者查看某种分页、批处理等。必须添加solr的一个新属性:solr.query.maximumResultsFromUnlimitedQuery=3500,正如Lista所说,不可以使用cmis qry控制这一点。您可以通过JMX更改这些配置,但它们将被设置在数据库中,并优先于您的配置文件。我知道这个解决方案有点“困难”,但我认为它将节省大量时间,而且可以实现