Fermer

avril 20, 2020

Recherche de contenu sans balise avec AEM Query Builder


Récemment, je suis tombé sur une exigence où nous devions créer une requête complexe. La requête était toutes les combinaisons des prédicats de titre, de prédicat de date et de balises pour rechercher les résultats de la page.

L'une des parties de l'exigence donnée était de rechercher les pages qui ne comprenaient pas de balise spécifique. Voyons un exemple simple.

Dans cet exemple, il y a trois pages de démonstration ( demo-page-1, demo-page-2 et demo-page-3 ), chacune contenant des balises spécifiques .

 Aem crxde page hierarchy

J'ai appliqué deux balises sur demo-page-1. De la même manière, j'ai également appliqué les balises pour les deux autres pages.

 Propriétés de la page Aem Page1 Balises

Maintenant, je veux rechercher les pages qui ne contiennent pas la balise tagsearch: model / sampleModel1 . Ainsi, en utilisant l'opération de propriété inégaux j'ai trouvé que la requête fonctionne parfaitement si une seule balise est affectée à la page. Par exemple, seulement tagsearch: model / sampleModel1 présent dans la propriété de page cq: tags.

 Aem Query Builder Unquals

Dans la capture d'écran ci-dessus, je devenais le parfait résultat. La page de démonstration-1 a été exclue du résultat, ce qui était attendu. Mais, lorsque plusieurs balises ont été affectées, la propriété cq: tags de la page, comme indiqué dans l'image précédente. Les résultats n'étaient pas comme prévu. Les résultats incluaient la page de démonstration-1 et je m'attendais à ce que le résultat exclue cette page en tant que balise qui s'y trouve.

Comment résoudre

Pour résoudre ce problème, j'ai appliqué une solution de contournement. J'ai créé la requête comme ceci:

 path = / content / project-name / en / us / predicate-demo
type = cq: page
1_group.p.not = true
1_group.1_property = jcr: content / cq: tags
1_group.1_property.value = recherche de balises: model / sampleModel1
1_group.1_property.operation = equals 

Cela a fonctionné pour moi et j'ai obtenu les résultats attendus de ce que je cherchais.

 Aem Query Negation

Nous pouvons utiliser l'exemple de requête ci-dessus selon à notre exigence de créer la carte de requête. Par conséquent, nous pouvons écrire les conditions. Par exemple, si la propriété contient des balises cq: et que l'opération est inégale, nous pouvons créer la requête comme ci-dessous:

 path = / content / project-name / en / us / predicate-demo
type = cq: page
1_group.100_group.p.not = true
1_group.100_group.1_property = jcr: content / cq: tags
1_group.100_group.1_property.value = recherche de balises: model / sampleModel1
1_group.100_group.1_property.operation = est égal à

Le 100_group est juste un texte aléatoire pour rendre le groupe (1_group.100_group) unique, afin que le 1_group.100_group.p.not = true ne soit pas affecté par l'autre groupe qui l'utilise dans le générateur de requêtes.

 path = / content / project-name / en / us / predicate-demo
type = cq: page
1_group.p.or = true
1_group.100_group.p.not = true
1_group.0_daterange.property = jcr: content / onTime
1_group.0_daterange.upperBound = 2020-03-27T14: 18: 00.000 + 05: 30
1_group.1_property = jcr: content / pageTitle
1_group.1_property.value = searchValue
1_group.100_group.1_property = jcr: content / cq: tags
1_group.100_group.1_property.value = recherche de balises: model / sampleModel1
1_group.100_group.1_property.operation = est égal à

Dans l'exemple ci-dessus, 1_group.100_group.p.not = true ne sera pas annulé 1_group.1_property = jcr: content / pageTitle résultats.

J'espère que vous pour ce blog utile. N'oubliez pas de laisser un commentaire dans la section ci-dessous si vous avez besoin d'aide avec cette solution. N'oubliez pas de consulter notre collection complète de blogs Adobe pour obtenir des conseils et astuces plus utiles.






Source link