如何使用Alfresco OperationContext过滤掉文档?

时间:2015-06-09 07:15:35

标签: java alfresco alfresco-share opencmis

我在Alfresco的一个文件夹中有很多文件。其中一些是pdf。 我想在pdf上过滤我的所有文档,只检索pdf文档。 现在我通过迭代一个非常大的列表来实现它,我从露天通过opencmis获取并查看文档名称并过滤它们,如果它们是.pdf。 我研究了api并看到了为此目的使用OperationContext的可能性,但我不知道该怎么做。 任何一个例子都会受到欢迎。

在获取所有文档以过滤它们之前,有更好的方法吗?

这就是我现在所做的事情:

public List< Document > retrieveAllPdfInFolder( Folder target )
{
    List< Document > documentList = GenericsUtil.makeList();
    for (CmisObject cmisObject: target.getChildren())
    {
        if (BaseTypeId.CMIS_DOCUMENT.equals(cmisObject.getBaseTypeId()))
        {
            Document doc =( Document ) cmisObject;
            if(doc.getName().endsWith( ".pdf" ))
                documentList.add( doc);
            System.out.println("[Docment] " + cmisObject.getName());
        }
    }

    return  documentList ;
}

这是我想要达到的目标:

public List< Document > retrieveAllPdfInFolder( Folder target, boolean all )
{
    OperationContext operationContext = OperationContextUtils.createOperationContext();
    Set<String> propertyFilter = new HashSet<String>();
    propertyFilter.add( PropertyIds.CONTENT_STREAM_MIME_TYPE);
    operationContext.setFilter( propertyFilter );
    operationContext.setFilterString(  ".pdf" );
    // i dont know how to set filter on operationContext

    List< Document > finalDocumentList = GenericsUtil.makeList();

    ItemIterable< CmisObject > documents = all ? target.getChildren() :  target.getChildren(operationContext);
    for (CmisObject cmisObject: documents)
    {
        if (BaseTypeId.CMIS_DOCUMENT.equals(cmisObject.getBaseTypeId()))
            finalDocumentList.add( ( Document ) cmisObject);
    }

    return  finalDocumentList ;   
}

2 个答案:

答案 0 :(得分:2)

您可以使用CMIS查询。这样的事情应该有效:

QueryStatement stmt = session.createQueryStatement("IN_FOLDER(?) AND cmis:contentStreamMimeType=?");
stmt.setString(1, target.getId());
stmt.setString(2, "application/pdf");

ItemIterable<CmisObject> documents = session.queryObjects("cmis:document", stmt.toString(), false, session.getDefaultContext());

for (CmisObject cmisObject: documents)
{
  finalDocumentList.add((Document)cmisObject);
}

答案 1 :(得分:1)

你应该尝试使用lucene搜索。如果是API,你可以使用webscript而不是CMIS,因为我不确定如何在CMIS API中使用lucene搜索。

下面的链接将帮助您搜索PDF类型的内容。在Lucene查询中,您可以指定mimetype。因此它将只返回那些PDF类型的文档。

https://forums.alfresco.com/forum/developer-discussions/other-apis/lucene-query-mimetype-10022007-1608

对于lucene搜索,请参阅下面的代码。

var parentFolder=search.luceneSearch("PATH:\"/app:company_home/st:sites\"");

这是它返回Site节点的方式。

有关lucene搜索的更多信息,请访问以下链接。

https://wiki.alfresco.com/wiki/Full_Text_Search_Query_Syntax