Querybuilder只搜索单个标签



我使用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-outdoor:apparel和geometrixx-media:events标签;然后,它还返回那些标记为geometrix -outdoor:apparel/coat和geometrix -media:events/festivals的页面。我怎样才能使它搜索只有父标记,而不是使用querybuilder子标记?

标签谓词设计用于考虑子标签及其第二种形式(基于路径的)。如果你不想要这个,你想要一个精确匹配,你需要像查询常规属性一样查询它。您的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 =>("A"one_answers"B"one_answers"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"one_answers"标记路径",因为标记路径是'标记'的有效值。

相关内容

最新更新