Java 如何使用Alfresco OperationContext筛选出文档?

Java 如何使用Alfresco OperationContext筛选出文档?,java,alfresco,alfresco-share,opencmis,Java,Alfresco,Alfresco Share,Opencmis,我在露天的一个文件夹里有很多文件。其中一些是pdf格式的。 我想过滤pdf上的所有文档,只检索pdf文档。 现在我通过迭代一个非常大的列表来完成,我从alfresco通过opencmis获得这个列表,查看文档名并过滤它们(如果是.pdf)。 我研究了api,并看到了使用OperationContext实现此目的的可能性,但我不知道如何做到这一点欢迎任何示例。 public List< Document > retrieveAllPdfInFolder( Folder target )

我在露天的一个文件夹里有很多文件。其中一些是pdf格式的。 我想过滤pdf上的所有文档,只检索pdf文档。 现在我通过迭代一个非常大的列表来完成,我从alfresco通过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 )
{
    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 ListretrieveAllPdfInFolder(文件夹目标)
{
ListdocumentList=GenericsUtil.makeList();
for(CmisObject-CmisObject:target.getChildren())
{
if(BaseTypeId.CMIS_DOCUMENT.equals(cmisObject.getBaseTypeId()))
{
文档doc=(文档)cmisObject;
if(doc.getName().endsWith(“.pdf”))
文件列表。添加(文档);
System.out.println(“[document]”+cmisObject.getName());
}
}
归还文件清单;
}
这就是我想要达到的目标:

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 ;   
}
public ListretrieveAllPdfInFolder(文件夹目标,布尔值全部)
{
OperationContext OperationContext=OperationContextUtils.createOperationContext();
Set propertyFilter=new HashSet();
添加(propertyId.CONTENT\u STREAM\u MIME\u TYPE);
setFilter(propertyFilter);
setFilterString(“.pdf”);
//我不知道如何在operationContext上设置筛选器
ListfinalDocumentList=GenericsUtil.makeList();
ItemIterabledocuments=all?target.getChildren():target.getChildren(operationContext);
用于(CmisObject CmisObject:文档)
{
if(BaseTypeId.CMIS_DOCUMENT.equals(cmisObject.getBaseTypeId()))
finalDocumentList.add((文档)cmisObject);
}
返回最终文档列表;
}

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

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

有关lucene搜索,请参见下面的代码

var parentFolder=search.luceneSearch("PATH:\"/app:company_home/st:sites\"");
这就是它返回站点节点的方式

要获得更多关于lucene搜索的知识,请访问下面的链接


您可以使用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);
}
QueryStatement stmt=session.createQueryStatement(“在_文件夹(?)和cmis:contentStreamMimeType=?”;
stmt.setString(1,target.getId());
stmt.setString(2,“应用程序/pdf”);
ItemIterable documents=session.queryObjects(“cmis:document”,stmt.toString(),false,session.getDefaultContext());
用于(CmisObject CmisObject:文档)
{
finalDocumentList.add((文档)cmisObject);
}

我从未使用过lucene search,你能给我举个例子吗?再一次使用thing search。lucene search(“路径:\”/app:company\u home/st:sites\”)代码将返回数组。如果知道如何设置操作上下文筛选器,那就太好了。我必须过滤掉多个基类型。