【问题标题】:How to get more than 1000 Documents By Using CMIS Query如何使用 CMIS 查询获取 1000 多个文档
【发布时间】:2017-04-19 16:02:09
【问题描述】:

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

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

但是我的问题是,我们可以通过我们在 CMIS 中的代码来做到这一点,因为我正在访问生产存储库。并在 repository.properties 文件中进行更改,我需要业务用户的一些停机时间。在我的情况下这是不可能的。

所以我正在寻找一些程序化解决方案。

谁能帮帮我?

在此先感谢..

【问题讨论】:

  • 为什么不使用分页,并以 1000 个块为单位获取?它会给存储库带来更少的压力
  • @Gagravarr 我对分页不太了解。它会给我存储库的所有结果吗?如果可能的话,您能否提供任何示例代码和一些将其与 CMIS 一起使用的步骤。谢谢
  • 在不知道您如何使用 CMIS 的情况下,我们无能为力。我们需要看一些代码!例如,使用 PortCMIS 为 .Net 执行此操作的方式与使用 Python 和 cmislib 完全不同
  • @Gagravarr 我正在使用 Java CMIS。我可以提供源代码吗?如果你愿意,我可以修改问题,我会添加我正在使用的代码。
  • 我遇到了同样的问题,我已经解决了另一个为什么,你有兴趣吗?!?

标签: alfresco alfresco-webscripts opencmis


【解决方案1】:

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

尝试将其添加到 /shared/classes/alfresco-global.properties 并重新启动:

  • system.acl.maxPermissionCheckTimeMillis=25000
  • system.acl.maxPermissionChecks=3500

如果你使用的是 solr,你也可以添加这个:

  • solr.query.maximumResultsFromUnlimitedQuery=3500

您可能会在这里找到帮助:

【讨论】:

  • 实际上我在多个地方找到了这个答案,但我想通过我的 cmis 代码做同样的事情而不接触露天。有没有可能???
  • 不,这是不可能的。您可以更改值,也可以查看某种分页、批处理等。
  • 您必须为 solr 添加一个新属性:solr.query.maximumResultsFromUnlimitedQuery=3500 正如 Lista 所说,您无法使用 cmis qry 来控制它。您可以通过 JMX 更改这些配置,但随后它们将被设置在数据库中并优先于您的配置文件
【解决方案2】:

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

创建一个保护类

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

你必须在你的保护类中使用的信息

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);
    }

}

一旦你将所有元素保存在一个列表中,你只需对列表中的每个元素使用迁移方法(如果你想使用 Alfresco ID 就可以,如果你想使用 Path 就可以了)

希望对您有所帮助。

【讨论】:

  • 我知道这个解决方案有点“难”,但我保证它会节省很多时间并且可以做到
猜你喜欢
  • 2016-10-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多