JCR按路径查询

lig*_*303 2 java jackrabbit jcr jcr-sql2

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

SELECT * FROM [my:Type] AS my WHERE PATH(my) LIKE '/content/subtree/%'
Run Code Online (Sandbox Code Playgroud)

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

Tho*_*ler 8

我认为这PATH(my)不是有效的JCR SQLJCR 2.0 SQL-2语法.你应该使用SQL-2:

select * from [my:Type] where isdescendantnode('/content/subtree')
Run Code Online (Sandbox Code Playgroud)

或XPath

/jcr:root/content//element(*, my:Type)
Run Code Online (Sandbox Code Playgroud)

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