【问题标题】:Querybuilder search for only single tagQuerybuilder 仅搜索单个标签
【发布时间】: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 使其仅搜索父标签而不搜索子标签?

【问题讨论】:

标签: aem query-builder jcr-sql2


【解决方案1】:

标签谓词旨在考虑子标签及其第二种形式(基于路径)。如果您不想要这个并且想要完全匹配,则需要像常规属性一样查询它。您的 querymap 应该与此类似。

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”或“B”或“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”和“B”和“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 的查询。如果您不想错过任何潜在的结果,您还应该将相关标签的路径添加到查询中,以便查询相关字段中的“标签 ID”和“标签路径”,因为标签路径是“标签”的有效值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-25
    • 2016-11-13
    • 1970-01-01
    • 1970-01-01
    • 2020-05-30
    • 1970-01-01
    相关资源
    最近更新 更多