Aem CQ QueryBuilder API。。为什么?

Aem CQ QueryBuilder API。。为什么?,aem,jcr,Aem,Jcr,当我们可以使用JCR查询API时,为什么AEM/CQ中需要QueryBuilderAPI?它提供了什么,而前者没有?或者它只是JCR API的非SQL替代品? 我们目前正在构建一个模块,该模块从JCR节点获取信息,并希望了解最佳的方法。 谢谢。查询生成器构建在JCR查询API之上。查询生成器提供了哪些JCR API没有的功能?我知道它的可用性如何。处理谓词映射而不是查询。开箱即用谓词在大多数情况下都有效。“限制”和“偏移”功能在分页情况下就像一个符咒分组让我们以非常可读的方式编写复杂的查询。另一

当我们可以使用JCR查询API时,为什么AEM/CQ中需要QueryBuilderAPI?它提供了什么,而前者没有?或者它只是JCR API的非SQL替代品? 我们目前正在构建一个模块,该模块从JCR节点获取信息,并希望了解最佳的方法。
谢谢。

查询生成器构建在JCR查询API之上。查询生成器提供了哪些JCR API没有的功能?我知道它的可用性如何。处理谓词映射而不是查询。开箱即用谓词在大多数情况下都有效。“限制”和“偏移”功能在分页情况下就像一个符咒分组让我们以非常可读的方式编写复杂的查询。另一个很好的功能是分面搜索,您的搜索结果可以通过标签分割。查询生成器返回资源而不是节点,因此您不必处理JCR api()附带的已检查存储库异常

由于它是以RESTServlet的形式公开的,所以它通常用于构建自定义仪表板之类的接口,熟悉程度会有所帮助

这是一个抽象概念,所以在较低的层次上,您不会受到更改的影响。在JackRabbit 2中使用的一些查询在较新的Oak(Aem 6)中不起作用,但所有的查询生成器one仍然可以工作

分面搜索示例:


查询生成器详细信息:

QueryBuilder IMO的缺点是它没有JCR API那么全面。例如,如果您想按属性对结果进行不区分大小写的排序,则Querybuilder会有问题。。。而在SQL2中,您可以在AEM 6.2(我认为6.1的FP)中使用
orderby lower(propertyName)
,querybuilder现在通过
orderby.case=ignore
支持不区分大小写的排序。