Search
IT Pro Magazine – SharePoint 2013 en 5 points
Hello à tous
Dans le numéro du moi de Mai, vous pouvez trouvez mon article sur SharePoint 2013 en 5 points.
Consultable sur le site : www.itpro.fr
Bonne lecture !
SharePoint 2013 : Taxonomy & Search Service Application Database & VariantType
Beaucoup de changement sont apparus au niveau du moteur de Search, la cause étant le renouveau en terme d’architecture, FAST oblige, mais aussi la capacité à tenir la charge notamment sur la haute disponibilité. Ici je me suis intéressé sur le schéma de base de données de Search Service Application Database, qui s’est vu offrir de nouvelle table et modèle. Je me concentre plus particulièrement sur les gestion de la Taxonomy. En effet, lors de certains test relatif à la construction de champs taxonomique purement CUSTOM (TAXHTFIELD0 etc..), je me suis demandé si les VariantType lors de la création via Powershell étaient toujours renseignés au sein des tables SQL sous SharePoint 2013. Il s’avère que NON, car le modèle à changer et permet aujourd’hui d’offrir plus de souplesse.
SharePoint 2010 Schéma :
Voici le schéma relatif à la gestion de la Taxonomy sous Search, en somme un schéma assez simple.
Le contenu de la table MSSManagedProperties
Suivi du contenu de la table MSSCrawledProperties où nous retrouvons notre Colonne VariantType.
SharePoint 2013 Schéma :
Voici maintenant l’évolution , ca risque de piquer un peu !
Cette fois-ci nous retrouvons de nouvelle tables et relations, l’existant de 2010 est présent mais a été remanié.
MSSSchemaOwner : Schéma Directeur , Permet la gestion du multi tenant et d’assuré de la disponibilité sur la ferme, elle comprend MSSTenant et MSSSiteCollection
Dépendent d’elle : MSSSchemaPropertyMappings, MSSCrawledProperties, MSSManagedProperties, MSSSchemaPropertyMappingsPending, MSSManagedPropAlias, MSSMnagedPropOverrides
Notons aussi l’évolution de la table MSSCrawledProperties
Comme vous le pouvez constater le VariantType a disparu.
Ainsi que MSSManagedProperties
VariantType Déprécié:
Afin de vérifier que la création de d’une nouvelle CrawledProperty et de m’assurer que les VariantType ont bien disparu, direction MSDN
http://technet.microsoft.com/en-us/library/ff608064(v=office.15).aspx l’on voit l’option VariantType est toujours supporté.
Alors un petit script pour tester :
$searchapp = Get-SPEnterpriseSearchServiceApplication
$cat = Get-SPEnterpriseSearchMetadataCategory -SearchApplication $searchapp -Identity People
$crawlprop = Get-SPEnterpriseSearchMetadataCrawledProperty -SearchApplication $searchapp -Category $cat
New-SPEnterpriseSearchMetadataCrawledProperty -SearchApplication $searchapp -Name "MyCrawlProp" -PropSet "00110329-0000-0110-c000-000000111146"
-Category "People" -IsNameEnum $false -VariantType 4127 -IsMappedToContents $false
Et lors de son exécution l’on s’aperçoit qu’elle est finalement dépréciée !
La CrawledProperty est bien créée mais ne possède plus la propriété VariantType ( Un champ vide se situe sous PropertyName)
Nous pouvons conclure qu’il vous faudra lors de la migration de certains scripts s’assurer que les options soient disponible.
IT Pro Magazine : SharePoint, Search et la Taxonomie
Hello à tous !
Dans le numéro d’octobre, vous pouvez retrouver en détail l’exploitation de la Taxonomie dans le moteur de recherche ” Search”.
Consultable bientôt sur le site : www.itpro.fr
Magazine Programmez – SharePoint 2010 PowerShell & Search
Hello à tous !
Ce mois-ci dans le numéro de Programmez vous retrouverez un article sur l’exploitation de la brique Search via des scripts PowerShell.
L’article est téléchargeable ici : http://www.programmez.com/magazine.php
Bonne lecture
Sharepoint 2010 – PowerShell et Search (Metadata)
Dans notre article nous allons aborder la modification de propriété d’indexation du moteur de recherche, ainsi que celle des Métadonnées gérées de SharePoint 2010 en PowerShell.
L’objectif recherché est de proposer des exemples simples, compréhensibles et de voir comment via l’utilisation de ILSPY, que certaines commandes ne sont pas si complètes que ça.
Crawling
Trois cmdlets sont principalement utilisées pour le Crawling : Get-SPEnterpriseSearchMetadataCrawledProperty, qui permet de récupérer les propriétés, Set-SPEnterpriseSearchMetadataCrawledProperty, celle-ci pour les mettre à jour et New-SPEnterpriseSearchMetadataCrawledProperty, pour la création.
Voici un exemple afin de récupérer des composants existant et de les mettre à jour avec la propriété IsMappedToContents qui permet de faire un mapping sur des métadonnées existantes, nous utilisons un fichier XML pour la récupération des éléments.
<? xml version=”1.0″ encoding=”utf-8″?>
<SearchProperties>
<ServiceName>Search Service Application</ServiceName>
<CrawledProperties>
<CrawledProperty Name=”ows_ContentType” />
</CrawledProperties>
<ExistingProperties>
<ManagedProperty Name=”ContentType”/>
</ExistingProperties>
<NewManagedProperties>
<!–Types = 1:Text, 2:Integer,3:Decimal,4:DateTime,5:YesNo,6 :Binary–>
<ManagedProperty Type=”4″ Name=”Demo”>
<Map Category=”Basic” Variant=”64″>15</Map>
</ManagedProperty>
</NewManagedProperties>
</SearchProperties>
Voici maintenant le code de Recherche :
if ( (Get-PSSnapin -Name Microsoft.SharePoint.PowerShell -ErrorAction SilentlyContinue) -eq $null )
{
Add-PsSnapin Microsoft.SharePoint.PowerShell
}
#Fichier XML
[System.Xml.XmlDocument] $XmlDoc = new-object System.Xml.XmlDocument
$file = resolve-path(“.MonFichier.xml”)
if (!$file)
{
Write-Host “Fichier non trouvé- Opération Annulé.” -ForegroundColor red
Break
}
write-host -f Green “Traitement du fichier:” $file
$XmlDoc = [xml](Get-Content $file)
#Parse des données
$sa = $XmlDoc.SearchProperties.ServiceName
$searchapp = Get-SPEnterpriseSearchServiceApplication $sa
$CrawledPropNodeList = $XmlDoc.SearchProperties.CrawledProperties
write-host -f Yellow ” Recherche des données Crawl existantes :”
foreach ($CrawledPropNode in $CrawledPropNodeList.CrawledProperty)
{
$SPCrawlProp = $CrawledPropNode.Name
#Vérification
if($crawledproperty =Get-SPEnterpriseSearchMetadataCrawledProperty -Name $SPCrawlProp -VariantType $SPCrawlVariant -SearchApplication $searchapp -ea “silentlycontinue”)
{
write-host -f Green “Des Crawl existent: Nom :” $crawledproperty.Name “- Indexé :” $crawledproperty.IsMappedToContents
write-host “Mise à jour :”
$crawledproperty | Set-SPEnterpriseSearchMetadataCrawledProperty -IsMappedToContents $True
write-host -f Green “Nom :” $crawledproperty.Name “- Indexé :” $crawledproperty.IsMappedToContents
}
else
{
write-host -f Red “Veuillez vérifier dans le fichier XML et Sharepoint qu’ils existent”
}
}
Metadata
Concernant les Metadata ici nous utilisons deux méthodes Get-SPEnterpriseSearchMetadataManagedProperty, pour récupérer des métadonnées et Set-SPEnterpriseSearchMetadataManagedProperty, pour la mise à jour.
Concernant les attributs nous utilisons EnabledForScoping, pour définir l’indexation, FullTextQueriable, pour rendre la propriété requêtable, RespectPriority qui correspond dans votre interface utilisatrice aux phrases suivantes : « Inclure les valeurs à partir de toutes les propriétés analysées mappées » ou « Inclure les valeurs à partir d’une propriété analysée unique en fonction de l’ordre spécifié »
function ExistingMeta
{
#Gestion de propriétés pour Settings
$OthersPropertyNodeList = $XmlDoc.SearchProperties.ExistingProperties
foreach ($PropertyNode in $OthersPropertyNodeList.ManagedProperty)
{
$SharePointProp = $PropertyNode.Name
if($mp=Get-SPEnterpriseSearchMetadataManagedProperty -SearchApplication $searchapp -Identity $SharePointProp -ea “silentlycontinue” )
{
if($mp.EnabledForScoping -eq $False)
{
$mp | Set-SPEnterpriseSearchMetadataManagedProperty -EnabledForScoping 1
}
if($mp.FullTextQueriable -eq $False)
{
$mp | Set-SPEnterpriseSearchMetadataManagedProperty -FullTextQueriable 1
}
if($mp.RespectPriority -eq $False)
{
$mp | Set-SPEnterpriseSearchMetadataManagedProperty -RespectPriority 1 -ea “silentlycontinue”
}
}
}
}
Concernant la création nous utilisons la cmdlet suivante New-SPEnterpriseSearchMetadataManagedProperty
try
{
write-host “Création :”
$mp = New-SPEnterpriseSearchMetadataManagedProperty -SearchApplication $searchapp -Name $SharePointProp -Type $SharePointPropType -EnabledForScoping 1 -FullTextQueriable 1
$mp.HasMultipleValues = $True
$mp.Update()
}
catch [Exception]
{
write-host -f Red “Erreur de création” $_;
}
Pour associer un mapping au Metadata il vous faut exécuter le code suivant :
$PropertyNodeList = $XmlDoc.SearchProperties.NewManagedProperties
foreach ($PropertyNode in $PropertyNodeList.ManagedProperty)
{
$SharePointProp = $PropertyNode.Name
$SharePointPropType = $PropertyNode.Type
$SharePointPropMapList = $PropertyNode.Map
$SharePointPropMultiple = $PropertyNode.Multiple
foreach ($SharePointPropMap in $SharePointPropMapList)
{
$SPMapCat = $SharePointPropMap.Category
$SPMapName = $SharePointPropMap.InnerText
$SPVariant = $SharePointPropMap.Variant
$cat = Get-SPEnterpriseSearchMetadataCategory –SearchApplication $searchapp –Identity $SPMapCat
$prop = Get-SPEnterpriseSearchMetadataCrawledProperty -SearchApplication $searchapp -Category $cat -Name $SPMapName -VariantType $SPVariant
write-host -f Cyan $cat.Name “-” $prop.Name
$mp=Get-SPEnterpriseSearchMetadataManagedProperty -SearchApplication $searchapp -Identity $SharePointProp -ea “silentlycontinue”
try
{
write-host “Création de la donnée finale”
$property = New-SPEnterpriseSearchMetadataMapping -SearchApplication $searchapp -CrawledProperty $prop -ManagedProperty $mp
}
catch [Exception]
{
write-host -f Red “Erreur de création de la donnée finale” $_;
}
}
}
ILSPY
Deux propriétés ne sont pas accessibles au niveau des options des cmdlets, celles qui apparaissent dans la section suivante de l’interface utilisatrice des métadonnées : « Optimiser le stockage des propriétés gérées »
Pour mettre à jour les propriétés nous utilisons ILSPY afin de voir le code appelé dans la librairie suivante : Microsoft.Office.Server.Search.dll puis nous cherchons la propriété suivante : Microsoft.Office.Server.Search.Internal.UI.ManagedPropertyPage, la méthode correspondante à OkButtonClicked(object sender, EventArgs e). Dans cette méthode nous observons que deux propriétés n’existent pas dans les attributs des cmdlets, QueryPropertyBlob = true; et PutInPropertyBlob = true;
Il ne vous reste plus qu’à les appeler dans votre code PowerShell de la façon suivante :
$mp. QueryPropertyBlob = $True
$mp. PutInPropertyBlob = $True
$mp.Update()
Notons toutefois que ces propriétés sont référencées dans la MSDN et sont pleinement accessible en utilisant les API de SharePoint. En conclusion nous avons la possibilité grâce à PowerShell d’automatiser certains processus de création et de modification des composants de recherche.