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

如何查询jackrabbit jcr以获得按匹配数排序的节点(使用SQL2/XPATH)?,xpath,jcr,jackrabbit,jcr-sql2,Xpath,Jcr,Jackrabbit,Jcr Sql2,假设我将节点存储在Jackrabbit JCR存储库中,它们在其中附加了多个“标记”属性 我想执行一个or查询,在该查询中,将返回具有带有查询中任何标记的标记的任何节点。但我要按匹配的数量排序。因此,所有或条件匹配的节点将位于顶部,而仅匹配一个的节点将位于最后 我想这和这里的建议是一样的: 但顺便说一句,我们在SQL2中没有CASE构造。我也不知道XPATH中有任何等价的东西 那么,我如何实现相同的结果(除了应用程序级别的后处理,由于性能问题,我更希望避免这种情况)。我希望这将有助于您执行查询

假设我将节点存储在Jackrabbit JCR存储库中,它们在其中附加了多个“标记”属性

我想执行一个or查询,在该查询中,将返回具有带有查询中任何标记的标记的任何节点。但我要按匹配的数量排序。因此,所有或条件匹配的节点将位于顶部,而仅匹配一个的节点将位于最后

我想这和这里的建议是一样的:

但顺便说一句,我们在SQL2中没有CASE构造。我也不知道XPATH中有任何等价的东西


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

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

public FolderListReturn listFolder(字符串parentNode、字符串userid、字符串密码){ System.out.println(“从用户“+userid”的“+parentNode+”获取文件夹和文件)

}

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;