【发布时间】:2016-09-30 17:09:41
【问题描述】:
我正在使用 Querybuilder 搜索带有特定标签的页面。问题是 Querybuilder 正在创建一个 xpath 查询,该查询会搜索标记的所有子标记以及主标记。我希望它只搜索父标签而不是子标签。使用 PredicateGroup 组合所有标签--
map.put("path", searchPath);
map.put("type", "cq:Page");
map.put("orderby", "@jcr:content/cq:lastModified");
PredicateGroup tagsPredicateGroup = new PredicateGroup();
PredicateGroup searchGroup = PredicateGroup.create(map);
PredicateGroup tagsPredicateGroup = new PredicateGroup();
tagsPredicateGroup.setAllRequired(false);
if (tagsArray != null && tagsArray.length > 0) {
for (Tag tag : tagsArray) {
tagsPredicateGroup.add(createSingleTagPredicate(tag));
}
}
searchGroup.add(tagsPredicateGroup);
Query query = queryBuilder.createQuery(searchGroup, session);
query.setHitsPerPage(10);
query.setStart(0);
private PredicateGroup createSingleTagPredicate(Tag tag) {
Map<String, String> tagMap = new HashMap<String, String>();
tagMap.put("tagid.property", "jcr:content/cq:tags");
tagMap.put("tagid", tag.getTagID());
return PredicateGroup.create(tagMap);
}
如果组件配置为搜索 geometrixx-outdoors:apparel 和 geometrixx-media:events 标签;然后它还会返回那些标记有 geometrixx-outdoors:apparel/coats 和 geometrixx-media:events/festivals 的页面。如何使用 querybuilder 使其仅搜索父标签而不搜索子标签?
【问题讨论】:
-
我会考虑使用 TagManager 对象docs.adobe.com/docs/en/cq/5-6-1/javadoc/com/day/cq/tagging/… find(java.lang.String, java.lang.String[]) 获取所有与 tagID 的 String[] 匹配的页面特定路径
标签: aem query-builder jcr-sql2