2015-04-18 34 views
2

當我們可以使用JCR Query API時,爲什麼AEM/CQ中需要QueryBuilder API?它提供了什麼,前者不?或者它只是JCR API的非SQL替代方案? 我們目前正在構建一個從JCR節點獲取信息的模塊,並且想知道最好的解決方法。 謝謝。CQ QueryBuilder API ..爲什麼?

回答

5

查詢生成器建立在JCR查詢API之上。查詢生成器提供的JCR API沒有提供什麼?恕我直言,這將是可用性。你處理謂詞的映射而不是查詢。開箱即用的謂詞在大多數情況下都適用。限制和偏移功能就像分頁情況的魅力一樣工作。 分組讓我們以非常可讀的方式編寫複雜的查詢。一個更好的功能是分面搜索,您的搜索結果可以按標籤拆分。查詢生成器返回資源而不是節點,因此您不必處理以處理與JCR API(https://cqdump.wordpress.com/2012/11/06/cq5-coding-patterns-sling-vs-jcr-part-1/)一起出現的那些檢查的存儲庫例外。

由於它作爲REST servlet公開,因此它經常用於構建自定義儀表板等界面,熟悉程度也有所幫助。

這是一個抽象,因此您可以在較低級別進行屏蔽。過去在JackRabbit 2中工作的一些查詢不適用於較新的Oak(Aem 6),但所有查詢構建器仍然有效。

面搜索例如:

http://localhost:4502/libs/cq/search/content/querydebug.html?charset=UTF-8&facets=on&isURL=on&query=http%3A%2F%2Flocalhost%3A4502%2Fbin%2Fquerybuilder.json%3Ftype%3Dcq%3APage%26tagid%3Dmarketing%3Ainterest%2Fproduct%26tagid.property%3Djcr%3Acontent%2Fcq%3Atags

查詢生成器詳細信息:http://www.slideshare.net/alexkli/cq5-querybuilder-adapttoberlin-2011

+0

的缺點QueryBuilder的IMO是,它不是全功能的JCR API。例如,如果你想通過一個屬性來執行不區分大小寫的結果順序,你將會遇到Querybuilder的問題......而在SQL2中,你可以使用'order by lower(propertyName)'http://stackoverflow.com/questions/ 28878727/case-insensitive-search-in-cq5-using-querybuilder –

+0

使用AEM 6.2(我認爲FP爲6.1)querybuilder現在支持通過'orderby.case = ignore'進行不區分大小寫的排序。 –