En configurant MOSS Search pour une grosse structure, on se retrouve rapidement avec de très nombreuses sources de données dans la configuration du Crawler.
Dans mon cas, j’ai plus de 50 sources de contenu de différents types :
- SharePoint WSS V3
- SharePoint WSS V2
- SharePoint SPS 2003
- Public Web Site
- MOSS 2007 (Contenu et profils)
Cas d’erreur
Le fait est que lors du crawl, le moteur de recherche peut recontrer des erreurs (erreur en Read ou en Write), que l’on peut voir comme suit (en se connectant en mode Console avec MSTSC) :
Qui au bout d’un moment propose d’être remontés à Microsoft via le Reporting :
Avec un exemple de détails comme suit :
On les retrouve aussi dans l’Event Viewer (en grand nombre) :
Quoi qu’il en soit, ces erreurs rencontrées par le Crawler bloque celui-ci et aucune indexation en cours ne se termine alors et si rien ne se passe, les indexations ne se termineront jamais
Le fait est que ces erreurs ont aussi pour effet secondaire de ne pas permettre d’arrêter une indexation en cours. Si on va par l’interface graphique dans la liste des sources et que l’on demande de stopper une source précise, celle-ci se place alors en “Stopping” et ne bouge plus.
Il faut alors effectuer un arrêt du service d’indexation (qui se redémarre tout seul).
- NET STOP OSEARCH
Il faudrait donc passer son temps à stopper une source de contenu en cours d’indexation et relancer le service. Mais ceci est encore bloqué par le fait que l’ordre des arrêts d’indexation ne doit pas être fait n’importe comment, sinon rien ne se passe.
Bref, cela devient rapidement cauchemardesque et on peut passer un long moment pour traîter ce cas.
Solution
La solution est encore l’utilisation d’un script PowerShell qui va vous permettre de changer le status de toutes les sources d’indexation (et cela couplé avec un restart du service)
function Start-Stop-All-Crawl([string]$SiteCollectionURL, [string]$FullIncrementalorStop)
{
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint") > $null
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.Office.Server.Search") > $null$site = new-object Microsoft.SharePoint.SPSite($SiteCollectionURL)
Write-Host "SiteCollectionURL", $SiteCollectionURL
$context = [Microsoft.Office.Server.Search.Administration.SearchContext]::GetContext($site)$site.Dispose()
$sspcontent = new-object Microsoft.Office.Server.Search.Administration.Content($context)
$sspContentSources = $sspcontent.ContentSources
Write-Host "Total of Content Sources: ", $sspContentSources.Count
foreach ($cs in $sspContentSources)
{
Write-Host "NAME: ", $cs.Name, " - ID: ", $cs.Id
switch($FullIncrementalorStop)
{
"full"
{
Write-Host "Start Full Crawl"
$cs.StartFullCrawl()
Write-Host "Full Crawl Started"
}
"incremental"
{
Write-Host "Start Incremental Crawl"
$cs.StartIncrementalCrawl()
Write-Host "Incremental Crawl Started"
}
default
{
Write-Host "Stop Crawl"
$cs.StopCrawl()
Write-Host "Crawl Stopped"
}
}
}
}
Que l’on utilise comme suit :
Start-Stop-All-Crawl “http://mysearchMOSS” ""
Attention
Cette solution ne traîte en rien le problème déclenchant l’erreur, mais permet juste de relancer votre serveur et le remettre dans une situation “normale”. Il vous faudra alors chercher la source de ces erreurs afin de les corriger.
Dans certains cas, il est même préférable de redémarrer le serveur d’indexation.
Romelard Fabrice [MVP]
Commentaires
Enregistrer un commentaire