搜索所有文档

发布于 2025-01-24 08:52:32 字数 960 浏览 1 评论 0 原文

我正在尝试通过alfresco DMS通过OpenCMIS进行FindAllByName功能。基本上,它应该找到所有具有一定名称的文档。

目前,我已经尝试进行递归搜索,不幸的是非常昂贵。

private List<Document> traverseAndFind(String name, Folder currentFolder, List<Document> foundDocuments) {

    List<Folder> subFolders = new ArrayList<>();
    for (CmisObject obj : currentFolder.getChildren()) {
        if (obj.getName().equals(name) && obj instanceof Document) {
            foundDocuments.add((Document) obj);
        } else if (obj instanceof Folder) {
            subFolders.add((Folder) obj);
        }
    }

    for (Folder subFolder : subFolders) {
        traverseAndFind(name, subFolder, foundDocuments);
    }

    return foundDocuments;
} 

从我在实现文件夹:: getChildren()的实现中看到的内容,它一直与 session 一起工作,并提出单独的请求以查找某个文件夹的孩子,从而导致进行相当浅的搜索的总体时间很长,这可能意味着我正在错误地处理问题。

有更好的方法吗?例如,您将如何进行搜索,从而导致所有存储的所有文件名的列表?

感谢您提供的任何提示!

I'm trying to do findAllByName functionality through OpenCMIS over an Alfresco DMS. Basically it's supposed to find all Documents with a certain name.

Currently I've tried to do a recursive search, which is unfortunately very costly.

private List<Document> traverseAndFind(String name, Folder currentFolder, List<Document> foundDocuments) {

    List<Folder> subFolders = new ArrayList<>();
    for (CmisObject obj : currentFolder.getChildren()) {
        if (obj.getName().equals(name) && obj instanceof Document) {
            foundDocuments.add((Document) obj);
        } else if (obj instanceof Folder) {
            subFolders.add((Folder) obj);
        }
    }

    for (Folder subFolder : subFolders) {
        traverseAndFind(name, subFolder, foundDocuments);
    }

    return foundDocuments;
} 

From what I've seen in the implementation of Folder::getChildren() it keeps working with Session and makes separate requests to find the children of a certain folder, leading to very long overall time to do a fairly shallow search, which probably means that I am approaching the problem incorrectly.

Is there a better approach to this? How would you for example do a search resulting in a List of absolutely every filename that is stored?

Thanks for any tips!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

浅紫色的梦幻 2025-01-31 08:52:32

在Alfresco中搜索的最佳方法是使用查询,

您的查询应该是这样的:

SELECT * FROM cmis:document where cmis:name = 'DOCUMENT_NAME' AND  IN_TREE('ID_FOLDER')

in_tree 用于从特定文件夹中进行递归搜索,如果您想在所有存储库中搜索,请不要添加 in_tree

在此处示例Java:

private List<Document> getDocumentsByName(String name, Folder folder) {

    List<Document> documents = new ArrayList<>();

    String query = "SELECT * FROM cmis:document where cmis:name = '"+name+"' AND IN_TREE('" + folder.getId() +"'";
    ItemIterable<QueryResult> results = session.query( query, false);

    //process result
    for (QueryResult qResult : results) {
        String objectId = qResult.getPropertyValueByQueryName(objectIdQueryName);
        Document doc = (Document) session.getObject(session.createObjectId(objectId));
        documents.add(doc);
    }

    return documents;
}

The best way to search in Alfresco is by using queries

Your query should be like this :

SELECT * FROM cmis:document where cmis:name = 'DOCUMENT_NAME' AND  IN_TREE('ID_FOLDER')

IN_TREE is used for recursive search from Specific Folder, if you want to search in all repository, don't add IN_TREE

Here sample in JAVA:

private List<Document> getDocumentsByName(String name, Folder folder) {

    List<Document> documents = new ArrayList<>();

    String query = "SELECT * FROM cmis:document where cmis:name = '"+name+"' AND IN_TREE('" + folder.getId() +"'";
    ItemIterable<QueryResult> results = session.query( query, false);

    //process result
    for (QueryResult qResult : results) {
        String objectId = qResult.getPropertyValueByQueryName(objectIdQueryName);
        Document doc = (Document) session.getObject(session.createObjectId(objectId));
        documents.add(doc);
    }

    return documents;
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文