JCR SQL2查询比较名称和路径

时间:2014-08-14 12:04:55

标签: jackrabbit jcr jcr-sql2

我试图执行以下jcr sql2查询:

        String expression = "SELECT * FROM [nt:base] AS p " +
            "WHERE  NAME(p) like 'opony.txt'";

但我得到了

javax.jcr.UnsupportedRepositoryOperationException. 

是否有其他方法可以搜索名称类似于'%example%'的节点?

我还试图搜索具有指定路径的节点

        String expression = "SELECT * FROM [nt:base] " +
            "WHERE PATH([nt:base]) like '/a/b'";

但我得到了

javax.jcr.query.InvalidQueryException: Query:
SELECT * FROM [nt:base] WHERE PATH([(*)nt:base]) like '/a/b'; expected: LENGTH, NAME, LOCALNAME, SCORE, LOWER, UPPER, or CAST

如何搜索路径类似于'%example%'?

的节点

我正在使用JCR_SQL2

javax.jcr.query.Query query = queryManager.createQuery(expression, Query.JCR_SQL2);

1 个答案:

答案 0 :(得分:0)

修改

有几点:

  • 如果您的模式中没有包含'%'这样的通配符,则LIKE和普通=运算符之间没有太大区别。
  • SQL2的所有实现都不支持PATH()和NAME()。它们在JBoss下似乎没问题。
  • 要搜索子树中的节点,请使用ISDESCENDANTNODE()函数。
  • 您可以测试[jcr:title]属性;它与节点名称不同,但可能符合您的目的。

因此,对于您的第一个查询,请尝试类似

的内容
SELECT * FROM [nt:base] AS p WHERE [jcr:title] like '%opony%'
    and ISDESCENDANTNODE('/content/a/b')

JBoss documentation on querying相当不错,但要注意它可能与香草Jackrabbit不完全对齐。我还将此cheat sheet用于Magnolia实现。