2015-06-26 20 views
0

假设我有一个存储在Jackrabbit JCR存储库中的节点,它们附有多个'tag'属性。如何查询jackrabbit jcr获取按匹配数量排序的节点(使用SQL2/XPATH)?

我想执行一个或查询,其中任何具有查询中的任何标记的标记的节点都会返回。但我希望他们按比赛次数排序。所以具有所有或条件匹配的节点将处于顶部,而只有一个匹配的节点将是最后一个。

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

但据我所知,我们没有情况SQL2构建。我也不知道XPATH中的任何等价物。

那么,我该如何实现相同的结果(其他的应用程序级别的后处理,我宁愿避免由于性能问题)。

回答

0

我希望这会帮助你执行查询:

公共FolderListReturn listFolder(字符串parentNode,字符串userid,字符串密码){ 的System.out.println( “获取文件夹和文件=” + parentNode + “用户:”+ 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; 

}

相关问题