JCR按路径查询

时间:2013-04-02 12:20:44

标签: java jackrabbit jcr jcr-sql2

我正在尝试通过此查询查询给定节点类型的子树:

SELECT * FROM [my:Type] AS my WHERE PATH(my) LIKE '/content/subtree/%'

以某种方式它没有给出任何结果 - 使用ISDESCENDANTNODE工作 - 但是只要我总共有> 5k个元素,查询性能就很糟糕 - 无论是在我的子树内部还是外部。

2 个答案:

答案 0 :(得分:7)

我认为PATH(my)无效JCR SQLJCR 2.0 SQL-2语法。您应该使用SQL-2:

select * from [my:Type] where isdescendantnode('/content/subtree')

或XPath

/jcr:root/content//element(*, my:Type)

这可能很慢,因为它只会使用节点类型的索引(路径未编入索引)。如果你需要它更快,你可以(例如)将路径存储为属性,然后添加相应的条件;但这会妨碍快速移动操作。

答案 1 :(得分:0)

如果您使用SQL2,只需更正您的查询

SELECT * FROM [my:type] WHERE PATH([my:type]) LIKE '/content/subtree/%'

对于SQL,您应该使用:

SELECT * FROM my:Type WHERE jcr:path like '/content/subtree/%'

此查询将搜索“/ content / subtree /”下所有级别的所有节点 但如果您只需要在“子树”下的一个级别进行搜索,则应该在查询中添加另一个选项以提高性能:

SELECT * FROM my:Type WHERE jcr:path like '/content/subtree/%' and not jcr:path like 'content/subtree/%/%'

您可以在此处找到更多详细信息:http://docs.jboss.org/exojcr/1.12.13-GA/developer/en-US/html/ch-jcr-query-usecases.html#JCR.ChildNodeConstraint