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

时间:2016-12-06 14:28:21

标签: lucene alfresco

我正在寻找一个查询(lucene,fts-alfresco或...)来返回所有具有特定子关联(非空)的文档。

某些背景信息: 类型为abc:document的文档具有子关联abc:linkedDocument。 并非所有文档都有其他文档链接到它们,有些没有一些文档有一个或多个。

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

目前,我有一个能够满足我需要的网页制作,但不希望有大量与业务无关的网页。

代码:

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

1 个答案:

答案 0 :(得分:3)

关联不具有查询能力,因此您必须执行您正在执行的操作,这实质上是检查结果集中的每个节点是否存在所需的关联。

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