在Alfresco:从节点路径获取NodeRef的最快方法

时间:2012-04-03 08:40:01

标签: alfresco

我正在尝试提高其中一项实施的效果,

我们目前使用来自rootNode的Alfresco nodeService.getChildAssocs检索节点,并运行某种循环来比较路径。

当您拥有大量文件时,效率不高。我从Share调试了locate文件webscript,看到他们根据路径运行Lucene查询。

这也是这里描述的内容:http://wiki.alfresco.com/wiki/NodeRef_cookbook#Getting_a_NodeRef_from_its_path

这是检索NodeRef的最有效方法吗?还有另一个API可以从repo端运行这个简单的任务(在Java中)吗?

非常感谢

2 个答案:

答案 0 :(得分:4)

在基础API中,您可以call

FileFolderService.resolveNamePath(NodeRef rootNode, List pathElements)
FileFolderService.resolveNamePath(NodeRef rootNode, List pathElements, Boolean mustExist)

Internally,它使用搜索循环模式,可能与您提到的已经在做的类似。然后,如果您只想进行搜索,可以使用其他API:

SearchService.query(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE, SearchService.LANGUAGE_XPATH, "/app:company_home/cm:path/cm:to/cm:content")

OOTB远程API是org/alfresco/cmis/item.get网络脚本,提供以下网址模板:

/cmis/s/{store}/arg/p?path={path}&filter={filter?}&returnVersion={returnVersion?}&includeAllowableActions={includeAllowableActions?}&includeRelationships={includeRelationships?}&includeACL={includeACL?}&renditionFilter={renditionFilter?}
/api/path/{store_type}/{store_id}/{nodepath}?filter={filter?}&returnVersion={returnVersion?}&includeAllowableActions={includeAllowableActions?}&includeRelationships={includeRelationships?}&includeACL={includeACL?}&renditionFilter={renditionFilter?}

我不建议将它用于性能关键路径,因为CMIS非常健谈。我可能会开发一个利用上述基础API的自定义Web脚本。

答案 1 :(得分:0)

以下是使用CMIS RESTful API的示例,假设您有一个repo文件" /Sites/test/test.pdf":

在Atom XML中返回元数据:

http//localhost:8080/alfresco/api/-default-/public/cmis/versions/1.1/atom/path?path=/Sites/test/test.pdf

下载内容(实际PDF文件):

http//localhost:8080/alfresco/api/-default-/public/cmis/versions/1.1/browser/root/Sites/test/test.pdf

以JSON格式返回元数据:

http//localhost:8080/alfresco/api/-default-/public/cmis/versions/1.1/browser/root/Sites/test/test.pdf?cmisselector=object

以JSON格式返回文件夹子项:

http//localhost:8080/alfresco/api/-default-/public/cmis/versions/1.1/browser/root/Sites/test?cmisselector=children