如何查询jackrabit-jcr以获得按匹配数排序的节点(使用SQL2/XPATH)



假设我有存储在Jackrabbit JCR存储库中的节点,它们在存储库中附加了多个"标记"属性。

我想执行一个或查询,其中返回具有带有查询中任何标记的标记的任何节点。但我想按比赛次数排序。因此,所有OR条件匹配的节点将在顶部,而一个仅匹配一个的节点将是最后一个。

我想这和这里的建议是一样的:https://stackoverflow.com/a/3289152/303106

但是AFAIK,我们在SQL2中没有CASE构造。我也不知道XPATH中有什么类似的东西。

那么,我该如何获得相同的结果呢(除了应用程序级别的后期处理,由于性能问题,我更希望避免这种情况)。

我希望这将帮助您执行查询:

public FolderListReturn listFolder(String parentNode, String userid, String password) {
    System.out.println("getting folders and files from = "+parentNode+" of user : "+userid);

    SessionWrapper sessions = JcrRepositoryUtils.login(userid, password);
    Session jcrsession = sessions.getSession();
    Assert.notNull(name);
    FolderListReturn folderList1 = new FolderListReturn();
    ArrayOfFolders folders = new ArrayOfFolders();
    try {
                javax.jcr.query.QueryManager queryManager;
                queryManager = jcrsession.getWorkspace().getQueryManager();
                **String expression = "select * from [nt:folder] AS s WHERE ISCHILDNODE(s,'"+name+"')and CONTAINS(s.[edms:owner],'*"+userid+"*')  ORDER BY s.["+Config.EDMS_Sorting_Parameter+"] ASC";**
                javax.jcr.query.Query query = queryManager.createQuery(expression, javax.jcr.query.Query.JCR_SQL2);
                javax.jcr.query.QueryResult result = query.execute();
                        for (NodeIterator nit = result.getNodes(); nit.hasNext();) {
                Node node = nit.nextNode();
                Folder folder = new Folder();
                folder=setProperties(node,folder,userid,password,jcrsession,name);
                folders.getFolderList().add(folder);
                }
        folderList1.setFolderListResult(folders);
        folderList1.setSuccess(true);
    } catch (Exception e) {
        e.printStackTrace();
    } finally{
        //JcrRepositoryUtils.logout(sessionId);
    }
    return folderList1;
}

最新更新