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

how to use Alfresco OperationContext to filter out documents?

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

你应该尝试使用 lucene search.In API 的案例,你可以使用 webscript 而不是 CMIS,因为我不确定如何在 CMIS 中使用 lucene 搜索 API.

下面link将帮助您搜索PDF的内容type.In Lucene查询您可以指定mimetype.So它将return仅那些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\"");

这就是 return 站点节点的方式。

要获得有关 lucene 搜索的更多知识,您可以在下面找到 link。

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

您可以使用 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);
}