How to force a full Reindex in SharePoint with PowerShell


In SharePoint , you may want to trigger a complete re-indexing of your site. This manipulation is possible with the site administration.



You can do the same thing with PowerShell by changing the value of the web property vti_searchversion

Below is a PowerShell function that re-index the entire site collection, it will update the vti_searchversion value, which will trigger a complete site collection re- indexing that will be considered in the next crawling.

function ReindexSite{
      param($web)

      Write-Host -ForegroundColor Yellow " Reindexing Site : " $ web.Title
      [int] $version = 0
      $propertyBag = $ web.AllProperties
      if ($propertyBag.ContainsKey("vti_searchversion") -eq $true)
      {
            $version = $propertyBag["vti_searchversion"]
      }
      Write-Host "Current search version: " $version -ForegroundColor Yellow
      $version++
      $propertyBag ["vti_searchversion"] = $version
      Write-Host "Updated search version: " $version -ForegroundColor Green
      $web.Update()
      foreach ($subWeb in $ web.Webs)
      {
            ReindexSite($subWeb)
      }
}

You can do also the same thing in SharePoint Online with this script:



function ReindexSite{
       param($web)

       $subWebs = $web.Webs
       $clientContext.Load($web)
       $propertyBag = $ web.AllProperties
       $allProperties = $web.AllProperties
       $clientContext.Load($propertyBag)
       $clientContext.Load($subWebs)
       $clientContext.ExecuteQuery()

       Write-Host -ForegroundColor Yellow " Reindexing Site : " $ web.Title
       [int] $version = 0
       $propertyBag = $ rootWeb.AllProperties
       if ($propertyBag.FieldValues.ContainsKey("vti_searchversion") -eq $true)
       {
             $version = $propertyBag["vti_searchversion"]
       }
       Write-Host "Current search version: " $version -ForegroundColor Yellow
       $version++
       $propertyBag["vti_searchversion"] = $version
       Write-Host "Updated search version: " $version -ForegroundColor Green
       $web.Update()
$clientContext.ExecuteQuery()
       foreach ($subWeb in $subWebs)
       {
             ReindexSite($subWeb)
       }
}