Adobe CQ5 _querybuilder

原创
2014/11/26 16:51
阅读数 219

1. 前言

Adobe CQ5默认的查询服务器 JSON : http://localhost:4503/bin/querybuilder.json Atom feed : http://localhost:4503/bin/querybuilder.feed iCalendar : http://localhost:4503/bin/querybuilder.ics

Java API PredicateGroup root = PredicateGroup.create(request.getParamterMap()); Query query = quwrybuilder.createQuery(root, session);

SearchResult result = query.get Result();
for (Hit hit : result.getHits()) {
    String path = hit.getPath();
    //....
}

2. querybuilder.json使用##

接口为http://localhost:4503/bin/querybuilder.json?后面跟上各种参数来作为查询条件

<h3>2.1 参数介绍</h3> <table style="border:solid 1px yellow"> <tbody> <tr> <th>目的</th> <th>对应参数</th> <th>Demo</th> </tr> <tr> <td>查询的节点类型</td> <td>type</td> <td>☞type=nt:file</td> </tr> <tr> <td>查询的节点名称,支持*</td> <td>nodename</td> <td>☞type=nt:file<br/>nodename=*.jar</td> </tr> <tr> <td>指定按哪个属性排序</td> <td>orderby</td> <td>☞type=cq:Page<br/>orderby=@jcr:content/cq:lastModified</td> </tr> <tr> <td>升序or降序</td> <td>orderby.sort</td> <td>☞type=cq:Page<br/>orderby=@jcr:content/cq:lastModified<br/>orderby.sort=desc</td> </tr> <tr> <td>全文搜索,支持*</td> <td>fulltext</td> <td>☞fulltext=Management<br/>orderby=@jcr:score<br/>orderby.sort=desc</td> </tr> <tr> <td>查询tag标签(多为页面)</td> <td><br/>tagid<br/>tagid.property</td> <td>☞type=cq:Page<br/>tagid=marketing:interest/product<br/>tagid.property=jcr:content/cq:tags</td> </tr> <tr> <td>分组查询</td> <td>group.p.or=true<br/>group.1_path<br/>group.2_path</td> <td>☞group.p.or=true<br/>group.1_path=/libs/dam/options<br/>group.2_path=/libs/dam/widgets/themes<br/>group.3_path=/libs/foundation/components</td> </tr> <tr> <td>按属性查询</td> <td>property<br/>property.value</td> <td>☞type=cq:Page<br/>property=@jcr:content/cq:template<br/>property.value=/apps/dragonsoft/templates/homepage</td> </tr> <tr> <td>同一属性,不同值查询(取并集)</td> <td>property<br/>property.1_value<br/>property.2_value<br/>property.3_value<br/>...</td> <td>☞type=cq:Page<br/>property=@jcr:content/cq:template<br/>property.1_value=/apps/geometrixx-media/templates/media-home-page<br/>property.2_value=/apps/geometrixx-media/templates/media-category-page<br/>property.3_value=/apps/geometrixx-media/templates/media-article-page</td> </tr> <tr> <td>不同属性查询(取交集)</td> <td>1_property<br/>1_property.value<br/>2_property<br/>2_property.value<br/>...<br/>...</td> <td>☞type=cq:Page<br/> 1_property=@jcr:content/cq:template<br/> 1_property.value=/apps/geometrixx-media/templates/media-home-page<br/> 2_property=@jcr:content/jcr:title<br/> 2_property.value=Toolbar</td> </tr> <tr> <td>取出全部属性</td> <td>p.hits=full</td> <td>☞type=cq:Page<br/>p.hits=full</td> </tr> <tr> <td>自定义返回哪些属性</td> <td>p.hits=selective<br/>p.properties<br/>(多个属性间用空格隔开)<br/></td> <td>☞type=cq:Page<br/> p.hits=selective<br/> p.properties=jcr:path jcr:created </td> </tr> <tr> <td>返回子节点的数据</td> <td>p.hits=full<br/>p.nodedepth</td> <td>☞type=cq:Page<br/> p.hits=full<br/> p.nodedepth=2</td> </tr> <tr> <td>设置每页返回的数据量</td> <td>p.limit 注:p.limit=-1,默认显示全部查询数据</td> <td>☞type=cq:Page<br/>p.limit=30</td> </tr> <tr> <td>设置锚点</td> <td>p.offset</td> <td>☞type=cq:Page<br/>p.offset=50</td> </tr>

</tbody>

</table> ![parmas][1] <h3>2.2 查询思路</h3> **e.g 1** 查询使用了指定模板的页面 ? 以`/apps/geometrixx/templates/assetshare`模板为例。 **1.** 首先确定了要查找的是一个页面,查看/content下页面对应的结构,如下 ![在此输入图片描述][2] 可见页面对应的模板属性并没有直接存储在页面`cq:Page`节点,而是存储在名称为`_jcr_content`,类型为**cq:PageContent**的节点内,对应属性名为`cq:template`,值为`/apps/geometrixx/templates/assetshare`。可见查询到**cq:PageContent**也就查找到我们要找的该模板对应的页面了. 此时:列举查询条件有哪些: type=cq:PageContent nodename=jcr:content property=cq:template property.value=/apps/geometrixx/templates/assetshare [http://localhost:4503/bin/querybuilder.json?type=cq:PageContent&nodename=jcr:content&property=cq:template&property.value=/apps/geometrixx/templates/assetshare][3] 查询结果如下: ![在此输入图片描述][4] 可见,有6个页面使用了`/apps/geometrixx/templates/assetshare`模板; 如果想在json数据中直接看到该node的详细属性,可以加上 p.hits=full 来查询全部,此时该节点的全部属性都会返回.如图 ![在此输入图片描述][5]

如图,就有了路径jcr:path,前面加上域名,后面的/jcr:content替换为.html,就是我们要查询的页面了.

2. 其实,直接查询页面也是可以的,此时的property设置为相对路径 type=cq:Page property=@jcr:content/cq:template property.value=/apps/geometrixx/templates/assetshare 查询结果如下: 在此输入图片描述

<h3>2.3 查询实例</h3> **1.** 查询页面中包含可分享图片的页面 首先查看content数据结构: ![在此输入图片描述][7] 可列出查询条件: type=cq:Page property=@jcr:content/banner/shareImage1 property.value=yes

http://localhost:4503/bin/querybuilder.json?type=cq:Page&property=@jcr:content/banner/shareImage1&property.value=yes

2. 查询是由/apps/geometrixx/templates/mobilecontentpage或者/apps/geometrixx/templates/mobiletraderpage模板创建,且属性mobilePreventRedirecttrue的页面 type=cq:Page 1_property=@jcr:content/cq:template 1_property.1_value=/apps/geometrixx/templates/mobilecontentpage 1_property.2_value=/apps/geometrixx/templates/mobiletraderpage 2_property=@jcr:content/mobilePreventRedirect 2_property.value=true

3. 以查询指定tags的product为例 path=/etc/commerce/products/mystore type=nt:unstructured 1_property=cq:commerceType 1_propervy.value=product 2_property=cq:tags 2_property.1_value=geometrixx-outdoors:apparel/footwear 2_property.2_value=geometrixx-outdoors:activity/hiking p.limit=-1 p.hits=full p.nodedepth=1 查询/etc/commerce/products/mystore 下的product,tags为...

3. querybuilder.feed使用##

以简单的查询nt:file为例,访问http://localhost:4503/bin/querybuilder.feed?type=nt:file,返回的数据如下; 在此输入图片描述 格式化后文本如下:

<!-- lang: html -->
  <feed xmlns="http://www.w3.org/2005/Atom" xmlns:os="http://a9.com/-/spec/opensearch/1.1/">
   <title type="text">CQ Feed</title>
   <id>
    http://localhost:4503/bin/querybuilder.feed?type=nt:file
   </id>
   <link href="http://localhost:4503/bin/querybuilder.feed?type=nt:file" rel="self" />
   <updated>
    2014-11-26T08:33:40.289Z
   </updated>
   <os:itemsperpage>
    10
   </os:itemsperpage>
   <os:totalresults>
    13127
   </os:totalresults>
   <os:startindex>
    0
   </os:startindex>
   <entry>
    <title type="html">AssetEditor.css</title>
    <link href="http://localhost:4503/libs/dam/widgets/themes/default/widgets/AssetEditor.css.html" />
    <id>
     http://localhost:4503/libs/dam/widgets/themes/default/widgets/AssetEditor.css
    </id>
    <published>
     2013-10-25T08:21:06.006Z
    </published>
   </entry>
   <entry>
    <title type="html">Util.js</title>
    <link href="http://localhost:4503/libs/dam/widgets/source/utils/Util.js.html" />
    <id>
     http://localhost:4503/libs/dam/widgets/source/utils/Util.js
    </id>
    <published>
     2013-10-25T08:21:05.862Z
    </published>
   </entry>
   <entry>
        .........http://my.oschina.net/img/gotop.gif
         .........
        ........
   </entry>
  </feed>

可见数据是以文档节点形式呈现,根结点为feed,子节点有title,id,updated,os:itemsperpage,os:totalresults,os:startindex和entry构成

<h3>3.1 title</h3> 查询方式 CQ Feed 固定 <h3>3.2 id</h3> 本次查询的链接 <h3>3.3 updated</h3> 本次查询的时间 注: `2014-11-26T08:33:40.289Z`为UTC时间格式,也就是国际统一时间/国际协调时`YYYYMMDD T HHMMSS Z(或者时区标识)`,换算为北京时间,即为`2014-11-26T16:33:40.289+08`,其中 “+08” 表示东八区,(在国际统计时间上加8个小时)。 <h3>3.4 os:itemsperpage</h3> 每页的数据量 <h3>3.5 os:totalresults</h3> 查询到的总的结果数 <h3>3.6 os:startindex</h3> 起点,锚点 <h3>3.7 entry</h3> 查询到的每个node的展现 entry节点构成如下 <!-- lang: html --> <entry> <title type="html">AssetEditor.css</title> <link href="http://localhost:4503/libs/dam/widgets/themes/default/widgets/AssetEditor.css.html" /> <id> http://localhost:4503/libs/dam/widgets/themes/default/widgets/AssetEditor.css </id> <published> 2013-10-25T08:21:06.006Z </published> </entry> 其中 <h4>title </h4> 为查询出的节点名称; <h4>link 和 id</h4> 为当前节点的路径; <h4>published</h4> 为该节点的最后修改时间。

querybuilder.json相比,querybuilder.feed查询结果的数据数量是一样的,只是结构和展示方式不一样,querybuilder.feed查询出来的数据构成更为简单一点,是文本格式;querybuilder.json查询出来的数据更为详细,且是JSON格式。

4. querybuilder.ics使用##

访问localhost:4503/bin/querybuilder.ics,会自动进入下载页,下载一个名为querybuilder.ics的文件,内容如下: BEGIN:VCALENDAR METHOD:PUBLISH CALSCALE:GREGORIAN VERSION:2.0 PRODID:-//Day Software//CQ5 Calendar 1.0.2//EN X-WR-CALNAME:cq5 export END:VCALENDAR

其余暂无研究!

5. JAVA querybuilder使用##

.....

append: 根据时间区间查询:

daterange.property=jcr:content/cq:lastModified
daterange.lowerBound=2010-04-01

daterange.property=jcr:content/cq:lastModified
daterange.upperBound=2010-04-01
展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部