1

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 を使用して、子タグではなく親タグのみを検索するにはどうすればよいですか?

4

1 に答える 1

1

タグの述語は、子タグとその 2 番目の形式 (パス ベース) を考慮に入れるように設計されています。これが不要で完全一致が必要な場合は、通常のプロパティのようにクエリを実行する必要があります。クエリマップは次のようになります。

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 を使用する必要があります => ("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" と "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」と「タグ パス」の両方でクエリを実行する必要があります。 「タグ」の有効な値。

于 2016-09-30T09:09:41.233 に答える