【问题标题】:How to Query Jackrabbit for same name siblings如何查询 Jackrabbit 的同名兄弟姐妹
【发布时间】:2017-01-03 12:56:24
【问题描述】:

是否可以在 Adob​​e CQ5/Adobe Experience Manager 中使用 JCR-SQL2、JCR-SQL 或 QueryBuilder 找到同名兄弟姐妹 (SNS)。我正在尝试将这些节点与具有以下条件的查询进行匹配,而无需遍历整个存储库(运行缓慢且运行时间长):

if(node.getIndex() > 1) {
  // this node is matching the SNS criteria
}

SNS定义如下:

/a/b/c
/a/b/c[2]
/a/b/c[3]

/a/b[2]/c[2]
/a/b/c[3]

/a/d/f
/a/d/f[2]

所以查询的结果应该包括/a/b/c[2], /a/b/c[3], /a/b[2]/c[2], /a/b/c [3], /a/d/f[2].

【问题讨论】:

    标签: aem query-builder jcr jcr-sql2


    【解决方案1】:

    Adobe 为此发表了一篇有用的文章:

    https://helpx.adobe.com/experience-manager/kb/find-sns-nodes.html

    编辑:对此的一个查询可能如下:

    SELECT [jcr:path] FROM [nt:base] WHERE ISDESCENDANTNODE('/') AND [jcr:path] like '%\]'

    这个想法是橡树查询将能够找到通过 SNS 解析逻辑迁移的索引节点。这些名称将在其名称(URI 的路径)中包含 ],可以通过上述查询进行选择。

    请谨慎使用此查询,因为有很多系统节点 OOTB 的名称中包含 ],这是设计使然。

    您可以将[nt:base] 更改为其他相关的橡木索引以便更好地过滤。

    HTH

    【讨论】:

    • 我知道这篇文章,但我希望有一个带有查询的替代解决方案。当存储库的大小为 TB 时,这种遍历解决方案是一项杀手级且非常耗时的任务。
    • 同意这将是一个杀手,但考虑到这样的结果不能通过查询获得并且不能从任何索引中受益,因此遍历可能是唯一的选择。我们编写了一个可以终止和继续的实用程序,并为此在输出中写了一份报告,这没关系,因为它是一次性的。还在旧系统中编写了一个监听器,用于在迁移之前标记重复的兄弟姐妹。 HTH
    • 我最近也找到了这个解决方案,谢谢帮助!
    • 从查询中排除 /jcr:system 路径是有意义的。 SELECT [jcr:path] FROM [nt:base] WHERE NOT ISDESCENDANTNODE('/jcr:system') AND [jcr:path] like '%\]'
    • 我测试了一下,查询似乎只适用于 JCR 3.x(例如 AEM 6.X),但不适用于 JCR 2.x,它在那里什么也找不到(已验证此类节点存在)
    猜你喜欢
    • 2019-05-06
    • 2019-08-29
    • 1970-01-01
    • 2014-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-23
    • 2019-09-08
    相关资源
    最近更新 更多