查找具有特定子关联的节点

find nodes with a specific child association

我正在寻找查询(lucene、fts-alfresco 或...)return 所有具有特定子关联(不为空)的文档。

一些上下文: abc:document 类型的文档有一个子关联 abc:linkedDocument。 并非所有文档都有其他文档链接到它们,有些有 none 有些有一个或多个。

我需要一种快速简便的方法来概览至少有一个文档链接到它们的所有文档。

目前我有一个 webscript 可以满足我的需要,但我不想拥有大量与业务无关的 webscript。

代码:

        SearchParameters sp = new SearchParameters();
        String query = "TYPE:\"abc:document\"";
        StoreRef store = StoreRef.STORE_REF_WORKSPACE_SPACESSTORE;
        sp.addStore(store);
        sp.setLanguage(SearchService.LANGUAGE_FTS_ALFRESCO);
        sp.setQuery(query);

        ResultSet rs = services.getSearchService().query(sp);
        List<NodeRef> nodeRefs = rs.getNodeRefs();
        for (NodeRef ref : nodeRefs) {
            List<ChildAssociationRef> refs = services.getNodeService().getChildAssocs(ref);
            for(ChildAssociationRef chref : refs){
            if(chref.getQName().equals(AbcModel.ASSOC_LINKED_DOC)){
                logger.debug("Document with linked doc: {}", ref);
                break;
            }
        }
        }

关联不可查询,因此您必须做您正在做的事情,这实际上是检查结果集中的每个节点是否存在所需的关联。

我可以建议的唯一改进是您可以请求特定类型的子关联,这样您就不必检查每个子关联的类型,请参阅 How to get all Child associations with a specific Association Type Alfresco (Java)