Forum Discussion
SharePoint 2016 search crawls not running automatically
AndresGorzelany Ultimately, we had to fully recreate our SSA instance. Nothing we tried was able to bring back some of the missing services that, presumably when the update happened, got out of sync between our servers or had disappeared entirely.
We did attempt a synchronization using the following which seem to work for others:
$svc = Get-SPEnterpriseSearchServiceInstance
$svc.Synchronize()However, this revealed what I assume was a misconfiguration between our servers and led to the complete shutdown of our SSA. It looked as if our other server had, at some point, had been configured to run the search service so HealthMonitor would shutdown any attempt of search to function on the desired server.
I think the biggest issue outside of the misconfiguration was that our Indexing Schedule Manager job was completely gone, without this, no crawl would be scheduled on our desired search server. We could not find a way to bring this back during our troubleshooting with Microsoft.
We ended up using the following script to create a new search instance:
Add-PSSnapin Microsoft.SharePoint.PowerShell -ErrorAction SilentlyContinue
# Specify the Settings for the Search Service Application
$ServerName = (Get-ChildItem env:computername).value
$IndexLocation = "E:\Search Index"
$SearchServiceApplicationName = "Search Service Application 2016"
$SearchServiceApplicationProxyName = "Search Service Application 2016 Proxy"
$SearchDatabaseServer = "Name of Database server"
$SearchServiceApplicationDatabase = "SP2016_Search_Service"
$SearchAppPoolName = "Search Service Application pool"
$SearchAppPoolAccount = Get-SPManagedAccount ""
#Check if Managed account is registered already
Write-Host -ForegroundColor Yellow "Checking if the Managed Accounts already exists"
$SearchAppPoolAccount = Get-SPManagedAccount -Identity $SearchAppPoolAccount -ErrorAction SilentlyContinue
If ($SearchAppPoolAccount -eq $null)
{
Write-Host "Please Enter the password for the Service Account..."
$AppPoolCredentials = Get-Credential $SearchAppPoolAccount
$SearchAppPoolAccount = New-SPManagedAccount -Credential $AppPoolCredentials
}
#*** Step 1: Create Application Pool for Search Service Application ****
#Get the existing Application Pool
$SearchServiceAppPool = Get-SPServiceApplicationPool -Identity $SearchAppPoolName -ErrorAction SilentlyContinue
#If Application pool Doesn't exists, Create it
if (!$SearchServiceAppPool)
{
$SearchServiceAppPool = New-SPServiceApplicationPool -Name $SearchAppPoolName -Account $SearchAppPoolAccount
write-host "Created New Application Pool" -ForegroundColor Green
}
#*** Step 2: Start Search Service Instances ***
Start-SPEnterpriseSearchServiceInstance $ServerName -ErrorAction SilentlyContinue
Start-SPEnterpriseSearchQueryAndSiteSettingsServiceInstance $ServerName -ErrorAction SilentlyContinue
#*** Step 3: Create Search Service Application ****
# Get the Search Service Application
$SearchServiceApplication = Get-SPEnterpriseSearchServiceApplication -Identity $SearchServiceApplicationName -ErrorAction SilentlyContinue
# Create the Search Service Application, If it doesn't exists!
if(!$SearchServiceApplication)
{
$SearchServiceApplication = New-SPEnterpriseSearchServiceApplication -Name $SearchServiceApplicationName -ApplicationPool $SearchServiceAppPool -DatabaseServer $SearchDatabaseServer -DatabaseName $SearchServiceApplicationDatabase
write-host "Created New Search Service Application" -ForegroundColor Green
}
#*** Step 4: Create Search Service Application Proxy ****
#Get the Search Service Application Proxy
$SearchServiceAppProxy = Get-SPEnterpriseSearchServiceApplicationProxy -Identity $SearchServiceApplicationProxyName -ErrorAction SilentlyContinue
# Create the Proxy, If it doesn't exists!
if(!$SearchServiceAppProxy)
{
$SearchServiceAppProxy = New-SPEnterpriseSearchServiceApplicationProxy -Name $SearchServiceApplicationProxyName -SearchApplication $SearchServiceApplication
write-host "Created New Search Service Application Proxy" -ForegroundColor Green
}
#*** Step 5: Create New Search Topology
$SearchServiceInstance = Get-SPEnterpriseSearchServiceInstance -Local
#To Get Search Service Instance on Other Servers: use - $SearchServiceAppSrv1 = Get-SPEnterpriseSearchServiceInstance -Identity "S-SP-02"
# Create New Search Topology
$SearchTopology = New-SPEnterpriseSearchTopology -SearchApplication $SearchServiceApplication
#*** Step 6: Create Components of Search
New-SPEnterpriseSearchContentProcessingComponent –SearchTopology $SearchTopology -SearchServiceInstance $SearchServiceInstance
New-SPEnterpriseSearchAnalyticsProcessingComponent –SearchTopology $SearchTopology -SearchServiceInstance $SearchServiceInstance
New-SPEnterpriseSearchCrawlComponent –SearchTopology $SearchTopology -SearchServiceInstance $SearchServiceInstance
New-SPEnterpriseSearchAdminComponent -SearchTopology $SearchTopology -SearchServiceInstance $SearchServiceInstance
#Prepare Index Location
Remove-Item -Recurse -Force -LiteralPath $IndexLocation -ErrorAction SilentlyContinue
MKDIR -Path $IndexLocation -Force
#Create Index and Query Components
New-SPEnterpriseSearchIndexComponent –SearchTopology $SearchTopology -SearchServiceInstance $SearchServiceInstance -RootDirectory $IndexLocation
New-SPEnterpriseSearchQueryProcessingComponent –SearchTopology $SearchTopology -SearchServiceInstance $SearchServiceInstance
#*** Step 7: Activate the Toplogy for Search Service ***
$SearchTopology.Activate() # Or Use: Set-SPEnterpriseSearchTopology -Identity $SearchTopology