Dans les articles précédents de cette série de blogs, nous avons vu comment utiliser Get-Item et Get-ChildItem pour récupérer des éléments de notre instance Sitecore. La commande Get-ChildItem est très lente si nous avons un grand nombre d'éléments à récupérer. C'est la même chose lorsque nous essayons de récupérer un grand nombre d'éléments à l'aide de l'API Sitecore Item. L'utilisation de l'API Sitecore ContentSearch est fortement recommandée pour ce scénario.
Il en va de même pour Sitecore Powershell. Nous pouvons utiliser les fonctionnalités fournies par l'API ContentSearch de Sitecore dans nos scripts Powershell.
Find-Item
La cmdlet Find-Item est utilisée pour récupérer des éléments à l'aide de l'API ContentSearch, où nous fournissons le nom de l'index et les conditions de filtrage avant d'obtenir les résultats. Les résultats renvoyés sont de type SearchResultItem; cependant, nous pouvons tirer parti de l'utilisation d'une autre applet de commande qui nous permet d'inclure nos champs personnalisés dans l'ensemble de résultats.
Voici quelques paramètres que nous pouvons utiliser avec Find-Item:
- -Index: Où nous spécifiez le nom de l'index à utiliser.
- -Critères: Où nous spécifions le filtre de recherche
- -Premier: Où nous pouvons spécifier le nombre de résultats à renvoyer
- -Skip: Où nous pouvons spécifier le nombre de résultats à ignorer avant de renvoyer le résultat
- -Où: Où nous pouvons spécifier Dynamic Linq pour filtrer les résultats
- -WhereValue: Où nous pouvons spécifier Tableau de valeurs qui seront utilisées par l'instruction -Where Linq
Exécutons un exemple de script pour voir comment fonctionne Find-Item:
$ FilterCriteria = @ ( @ {Filter = "Equals"; Field = "_templatename"; Value = "Event Details"}, @ {Filter = "StartsWith"; Field = "_fullpath"; Value = "/ sitecore / content / Events"} ) Find-Item -Index "sitecore_master_index" -Criteria $ FilterCriteria
Voir que nous avons spécifié "sitecore_master_index" pour le paramètre – Index . Nous avons créé une expression de regroupement et l'avons affectée à la variable $ FilterCriteria.
Ensuite, nous avons créé différents filtres d'objets à l'intérieur de notre expression Criteria. Chaque filtre a trois parties imp: champ, filtre et valeur.
- Filtre : où nous spécifions l'opérateur pour évaluer la condition. Ex- Equals, StartsWith, Contains, EndsWith, LessThan, GreaterThan etc.
- Champ : où nous pouvons spécifier le nom du champ indexé que nous voulons utiliser en condition de filtrage.
- Valeur : Valeur du champ pour satisfaire la condition.
Sortie du script ci-dessus:
Ci-dessus, le script obtiendra le résultat qui a la valeur de propriété TemplateName comme Détails de l'événement et leur le chemin commence par «/ sitecore / content / events» comme indiqué dans l'image.
Récupération de champs personnalisés
Maintenant, comme je l'ai mentionné, l'ensemble de résultats contiendra un élément de type SearchResultItem . Nous n'obtiendrons pas nos champs personnalisés si nous essayons d'y accéder.
Voir l'image ci-dessous où j'ai écrit un script pour afficher le champ personnalisé DifficultyLevel . Il ne montre rien.
Ici, nous pouvons utiliser Initialize-Item après Pipe dans notre instruction pour obtenir des champs personnalisés dans nos résultats.
L'utilisation du script suivant affiche notre champ personnalisé dans la sortie des résultats:
$ FilterCriteria = @ ( @ {Filter = "Equals"; Field = "_templatename"; Value = "Event Details"}, @ {Filter = "StartsWith"; Field = "_fullpath"; Value = "/ sitecore / content / Events"} ) Find-Item -Index "sitecore_master_index" $ FilterCriteria | Initialize-Item | Select-Object -Property DifficultyLevel
Sortie de ci-dessus:
Ici, nous pouvons maintenant voir les valeurs de nos champs personnalisés . Initialize-Item transforme SearchResultItem tapez les éléments du jeu de résultats en éléments Sitecore avec tous les champs inclus.
Utilisation de -First
Nous pouvons utiliser l'opérateur -First pour extraire un nombre donné d'éléments de résultat de l'ensemble de résultats. Voici la déclaration:
$ FilterCriteria = @ ( @ {Filter = "Equals"; Field = "_templatename"; Value = "Event Details"}, @ {Filter = "StartsWith"; Field = "_fullpath"; Value = "/ sitecore / content / Events"} ) Find-Item -Index "sitecore_master_index" -Criteria $ FilterCriteria -First 2
Ceci ne récupérera que 2 éléments de l'ensemble de résultats:
[19659004] Utilisation de l'opérateur -Skip
Cela ignorera le nombre d'éléments en fonction de la valeur que nous transmettons.
$ FilterCriteria = @ ( @ {Filter = "Equals"; Field = "_templatename"; Value = "Event Details"}, @ {Filter = "StartsWith"; Field = "_fullpath"; Value = "/ sitecore / content / Events"} ) Find-Item -Index "sitecore_master_index" -Criteria $ FilterCriteria -Skip 2
Sortie:
Utilisation des valeurs Where et Where
Nous pouvons utiliser les valeurs Where et Where pour filtrer notre recherche au lieu des critères. Ici, nous pouvons utiliser des objets appropriés par opposition à l'opérateur de critères que nous avons vu précédemment. – Où est utilisé pour spécifier la requête Dynamic Linq et – WhereValues contient un tableau de valeurs.
Ensuite, le script récupère les éléments basés sur des modèles qui ont "Événement" dans leur nom et qui se trouvent sous le nœud "/ sitecore / content / events".
$ WhereCondition = 'TemplateName.Contains (@ 0) And Path.Contains (@ 2)' $ WhereValues = @ ("Événement", "en", "/ sitecore / content / Events") Find-Item -Index "sitecore_master_index" -Where $ WhereCondition -WhereValues $ WhereValues
Sortie du script ci-dessus:
Dans cet article de blog, nous avons vu comment interroger les index Sitecore à l'aide de l'API ContentSearch dans Sitecore Powershell. C'est une approche rapide et nous pouvons facilement utiliser des filtres pour notre résultat.
Jusqu'à présent, nous avons vu comment travailler avec les éléments Sitecore. Dans le prochain article, nous découvrirons comment travailler avec les rendus Sitecore à l'aide de différentes commandes Sitecore Powershell.
Source link