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 .
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.
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.
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.
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