Querybuilder 仅搜索单个标签
Querybuilder search for only single tag
我正在使用 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 标签;然后它也 returns 那些用 geometrixx-outdoors:apparel/coats 和 geometrixx-media:events/festivals 标记的页面。我怎样才能让它使用 querybuilder 只搜索父标签而不搜索子标签?
标签谓词旨在考虑子标签及其第二种形式(基于路径)。如果你不想要这个并且你想要一个精确匹配,你需要像常规 属性 一样查询它。您的查询映射应该类似于此。
map.put("path","/content/geometrixx-outdoors");
map.put("type","cq:Page");
map.put("property","jcr:content/cq:tags");
map.put("property.value","geometrixx-outdoors:apparel");
如果您需要查询多个标签 ID,应该是 OR'd => ("A" or "B" or "C")
map.put("path","/content/geometrixx-outdoors");
map.put("type","cq:Page");
map.put("property","jcr:content/cq:tags");
map.put("property.1_value","geometrixx-outdoors:apparel");
map.put("property.2_value","geometrixx-media:events");
map.put("property.3_value","mynamespace:my-tag");
如果您需要查询多个标签 ID,应该是 AND'd => ("A" and "B" and "C")
map.put("path","/content/geometrixx-outdoors");
map.put("type","cq:Page");
map.put("property","jcr:content/cq:tags");
map.put("property.and","true");
map.put("property.1_value","geometrixx-outdoors:apparel");
map.put("property.2_value","geometrixx-media:events");
map.put("property.3_value","mynamespace:my-tag");
重要说明,我只显示了对 id 的查询。如果您不想错过任何潜在的结果,您还应该将相关标签的路径添加到查询中,以便您在相关字段内查询 "tag id" 和 "tag path",因为标签path 是 'tag'.
的有效值
我正在使用 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 标签;然后它也 returns 那些用 geometrixx-outdoors:apparel/coats 和 geometrixx-media:events/festivals 标记的页面。我怎样才能让它使用 querybuilder 只搜索父标签而不搜索子标签?
标签谓词旨在考虑子标签及其第二种形式(基于路径)。如果你不想要这个并且你想要一个精确匹配,你需要像常规 属性 一样查询它。您的查询映射应该类似于此。
map.put("path","/content/geometrixx-outdoors");
map.put("type","cq:Page");
map.put("property","jcr:content/cq:tags");
map.put("property.value","geometrixx-outdoors:apparel");
如果您需要查询多个标签 ID,应该是 OR'd => ("A" or "B" or "C")
map.put("path","/content/geometrixx-outdoors");
map.put("type","cq:Page");
map.put("property","jcr:content/cq:tags");
map.put("property.1_value","geometrixx-outdoors:apparel");
map.put("property.2_value","geometrixx-media:events");
map.put("property.3_value","mynamespace:my-tag");
如果您需要查询多个标签 ID,应该是 AND'd => ("A" and "B" and "C")
map.put("path","/content/geometrixx-outdoors");
map.put("type","cq:Page");
map.put("property","jcr:content/cq:tags");
map.put("property.and","true");
map.put("property.1_value","geometrixx-outdoors:apparel");
map.put("property.2_value","geometrixx-media:events");
map.put("property.3_value","mynamespace:my-tag");
重要说明,我只显示了对 id 的查询。如果您不想错过任何潜在的结果,您还应该将相关标签的路径添加到查询中,以便您在相关字段内查询 "tag id" 和 "tag path",因为标签path 是 'tag'.
的有效值