SP2010 – Configurer Search Server avec PowerShell – Part 2

Posted on Updated on

Voici donc la suite logique des choses, comment configurer des étendues dans SharePoint 2010 Search Server à l’aide de PowerShell !

La première partie expliquant comment créer des sources de contenu se trouve ici : https://kazoumoulox.wordpress.com/2011/10/06/confsearchpowershell-part1/

Première étape, lancer le Management Shell pour SharePoint 2010, depuis le menu Démarrer > Tous les programmes > Microsoft SharePoint 2010 Products > SharePoint 2010 Management Shell :

Launch management shell

Ensuite, il faut récupérer l’instance du service de recherche avec la ligne (Entre les quotes, c’est le nom de l’application de service qui a été créée dans les précédents articles):

  • $searchapp = Get-SPEnterpriseSearchServiceApplication “Service de Recherche de SharePoint 2010 créé par Powershell”
Nous allons ensuite créer une étendue (Scope en Anglais) toujours à l’aide de Powershell :
  • $MyScope = New-SPEnterpriseSearchQueryScope -Name “Première Etendue PowerShell” -Description “Première étendue créée avec Powershell” -SearchApplication $searchapp -DisplayInAdminUI $true
=> La variable $true est une variable globale de PowerShell, pas besoin de la déclarer
Dans l’administration centrale, dans les étendues de recherche associées à l’application de service “Service de Recherche de SharePoint 2010 créé par Powershell”, on retrouve bien la nouvelle étendue (pas de règles pour le moment) :
Nous allons à présent ajouter des règles sur cette nouvelle étendue, par exemple lui indiquer quel contenu nous voulons inclure à l’étendue. Dans mon cas, tout le contenu se trouvant dans l’étendue créée précédemment :
  • New-SPEnterpriseSearchQueryScopeRule -RuleType PropertyQuery -ManagedProperty ContentSource -PropertyValue “Nouvelle Source” -FilterBehavior Include -url http://labs-sp2010 -scope $MyScope -SearchApplication $searchapp
Je voudrais ensuite ajouter une nouvelle règle me permettant de ne remonter que les éléments de certains types de contenu. Pour cela, il faut utiliser la méthode de Glyn Clough que vous trouverez ici : http://www.glynblogs.com/2011/01/create-a-content-type-search-refinement-panel-in-sharepoint-2010.html afin de pouvoir ajouter une propriété gérée pointant sur le type de contenu de chaque élément stocké dans SharePoint (autant documents que items).
En suivant ce tutorial, on obtient dans notre cas :
Création de la propriété gérée :
On la nommera ContentTypeForSearch, on pourra ajouter une petit description et on conservera le type texte pour la propriété. Ensuite, on veillera à ce que “Inclure les valeurs à partir de toutes les propriétés analysées mappées” soit bien sélectionné. Puis il faudra cliquer sur le bouton “Ajouter un mappage” :
Dans la popup modale qui apparaît, on recherchera la propriété ows_ContentType et on cliquera sur OK :
Sélectionner ensuite “Autoriser l’utilisation de cette propriété dans les zones” ainsi que “Ajoutez la propriété gérée au jeu de résultats personnalisé récupéré sur chaque requête. Remarque : par défaut, seuls les 2 premiers kilo-octets de données sont disponibles à l’affichage.” et enfin valider la page en cliquant sur OK :
On voit alors cette nouvelle propriété apparaître dans la liste avec les propriétés suivantes :
J’ai donc une nouvelle propriété gérée mappée sur la propriété ows_ContentType. il me reste à présent à lancer une indexation complète des données par le moteur de recherche de SharePoint. Cela se fait en utilisant le lien “Sources de contenu” sur la gauche puis en utilisant le menu contextuel sur la source de contenu et “Démarrer l’analyse complète” tel que suit :
L’analyse peut être un peu longue suivant le volume d’informations à indexer et suivant la configuration de votre serveur (Processeurs/RAM en particulier). Il faut donc attendre la fin de l’indexation :
OU ALORS…. On peut le faire en Powershell (vous y avez cru hein !!! genre on ne peut pas faire ça en PowerShell…)  !!!
Rappelez-vous, au début de l’exercice nous avions : $searchapp = Get-SPEnterpriseSearchServiceApplication “Service de Recherche de SharePoint 2010 créé par Powershell”.
  • Nous allons donc commencer par $metadatacategory = Get-SPEnterpriseSearchMetadataCategory –Identity SharePoint -SearchApplication $searchapp
  • Puis $metadatacategory pour vérifier le contenu :
On voit donc qu’il y a 156 propriété indexées dans le magasin de cette application de service de recherche. Nous allons maintenant récupérer celle concernant les types de contenu : ows_ContentType :
  • $crawledproperty = Get-SPEnterpriseSearchMetadataCrawledProperty -SearchApplication $searchapp -Name ows_ContentType
  • Puis $crawledproperty 
On peut comparer avec les valeurs indiqués lorsque l’on regarde les propriétés de la propriété indexée :
Nous avons donc bien récupéré la propriété indexée “ows_content”. Il va maintenant falloir créer notre propriété gérée, mappée sur cette propriété indexée. Pour cela, toujours grâce à Powershell on créée une propriété gérée nommée ContentTypeSearch2 (on conserve la première pour pouvoir comparer) :

Et dans SharePoint, la nouvelle propriété gérée apparaît bien mais il y a deux soucis. Le premier est que cette propriété ne référence pas encore la propriété indexée “ows_ContentType” et également nous avions positionné “Ajoutez la propriété gérée au jeu de résultats personnalisé récupéré sur chaque requête. Remarque : par défaut, seuls les 2 premiers kilo-octets de données sont disponibles à l’affichage.” et cela n’est pas sélectionné dans notre cas.
Première chose donc, mapper la propriété gérée et la propriété indexée :
  • New-SPEnterpriseSearchMetadataMapping -SearchApplication $searchapp -ManagedProperty $managedproperty -CrawledProperty $crawledproperty
Dans la page SharePoint des propriétés de cette propriété gérée, on a alors :
La propriété gérée est bien mappée à la propriété indexée… Magique !  Par contre pour trouver comment cocher l’option “Ajoutez la propriété gérée au jeu de résultats personnalisé récupéré sur chaque requête. Remarque : par défaut, seuls les 2 premiers kilo-octets de données sont disponibles à l’affichage.”… sacré challenge !
En effet, aucune propriété ne permet de le faire directement (par exemple un attribut de $managedproperty qu’il faudrait mettre à True). Pas aussi simple.
Comment faire… ??? Le plus simplement que j’ai trouvé est d’ouvrir la page http://labs-sp2010:65000/_admin/search/managedproperty.aspx?property=ContentTypeForSearch2&appid={50762837-130c-4346-b7d8-f5432de62ad4} avec le bloc note et identifier dans quelle “assembly” (DLL) est situé le “code behind” exécuté lorsque l’on clique sur OK. J’ouvre donc “C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\ISAPI\Microsoft.Office.Server.Search.dll” à l’aide de ILSpy ou Reflector afin de décompiler le code de cette DLL.
Je parcours alors les namespace et classes de cette assembly pour trouver la bonne classe : Microsoft.Office.Server.Search.Internal.UI.ManagedPropertyPage et la bonne méthode appelée sur le clic bouton : OkButtonClicked :
Et on localise un bout de code où l’on teste que la case à cocher (checkbox) en question est cochée ou pas :
Et on voit que deux propriétés sont mises à jour !!! QueryPropertyBlob et PutInPropertyBlob (à True pour les deux). Il faudra donc sans doutes mettre ces deux propriétés à jour par PowerShell. Je me lance alors dans le test :
  • $managedproperty.QueryPropertyBlob = $true
  • $managedproperty.PutInPropertyBlob = $true
  • $managedproperty.Update()

Et le grand test :
CA MARCHE !!! WAAAAAAAAOUUUUUUUU
Maintenant, il suffit de lancer une indexation complète, bien sûr par PowerShell (je vous rappelle) :
  • $contentsource = Get-SPEnterpriseSearchCrawlContentSource ”Nouvelle Source” -SearchApplication $searchapp
  • $contentsource.StartFullCrawl()
Lorsque l’indexation sera terminée, la dernière opération consistera à ajouter une règle sur notre étendue de recherche permettant de filtrer les résultat sur le type de contenu (pour rappel, nous voulions tous les documents remontés par la source de contenu “Nouvelle Source” et qui sont du type de contenu “TOTO” (c’est un exemple… :p )).
Mais ce sera pour la prochaine partie !  J’ai commencé cet article en octobre… il est temps qu’il sorte enfin. A bientôt donc !

2 thoughts on “SP2010 – Configurer Search Server avec PowerShell – Part 2

    […] La seconde partie expliquant comment créer les étendues personnalisées, des des propriétés gérées se trouve ici : https://kazoumoulox.wordpress.com/2012/01/17/confsearchpowershell-part2/ […]

    […] SP2010 – Configurer Search Server avec PowerShell – Part 2 […]

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s