0

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

我想执行 or 查询,其中返回具有查询中任何标签的标签的任何节点。但我希望它们按匹配数排序。因此,具有所有 OR 条件匹配的节点将位于顶部,仅匹配一个的节点将位于最后。

我想这与这里的建议相同: https ://stackoverflow.com/a/3289152/303106

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

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

4

1 回答 1

0

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

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

于 2015-09-14T11:01:23.090 回答