Create Search Service Application& Search Topology with Powershell

What needs to be done?

14 steps for a simple Search Topology – 1 powershell can do them all.

Create a Service Application Pool for the Search Service Application
Create a Search Service Application
Create a Search Service Application Proxy
Get the current Search Instance
Save the current Search Topology for later use
Create a new Search Topology
Create all the Search Components (Analytics- , Content Processing, Query Processing, Crawler, Admin Component)
Remove the Index-Folder and recreate it
Create a new Index Component
Activate the new Topology
Call the method synchronize on the old topology – this errors but forces an update on the old topology object
The “forced updated” Topology object becomes inactive and can be deleted.
Everything done – start a full crawl oder set it to the new shiny continuous crawling.

Please keep in mind that the $IndexLocation folder will be deleted and recreated.

Adjust the settings in the lines 4-11 to your needs.

Add-PsSnapin Microsoft.SharePoint.PowerShell -ErrorAction SilentlyContinue

#Settings
$IndexLocation = “C:\Search” #Location must be empty, will be deleted during the process!
$SearchAppPoolName = “Search App Pool”
$SearchAppPoolAccountName = “demo\SPSearchAppPool”
$SearchServiceName = “Search SA”
$SearchServiceProxyName = “Search SA Proxy”

$DatabaseServer = “sp2013\sharepoint”
$DatabaseName = “SP2013 Search”

Write-Host -ForegroundColor Yellow “Checking if Search Application Pool exists”
$spAppPool = Get-SPServiceApplicationPool -Identity $SearchAppPoolName -ErrorAction SilentlyContinue

if (!$spAppPool)
{
Write-Host -ForegroundColor Green “Creating Search Application Pool”
$spAppPool = New-SPServiceApplicationPool -Name $SearchAppPoolName -Account $SearchAppPoolAccountName -Verbose
}

Write-Host -ForegroundColor Yellow “Checking if Search Service Application exists”
$ServiceApplication = Get-SPEnterpriseSearchServiceApplication -Identity $SearchServiceName -ErrorAction SilentlyContinue
if (!$ServiceApplication)
{
Write-Host -ForegroundColor Green “Creating Search Service Application”
$ServiceApplication = New-SPEnterpriseSearchServiceApplication -Name $SearchServiceName -ApplicationPool $spAppPool.Name -DatabaseServer $DatabaseServer -DatabaseName $DatabaseName
}

Write-Host -ForegroundColor Yellow “Checking if Search Service Application Proxy exists”
$Proxy = Get-SPEnterpriseSearchServiceApplicationProxy -Identity $SearchServiceProxyName -ErrorAction SilentlyContinue
if (!$Proxy)
{
Write-Host -ForegroundColor Green “Creating Search Service Application Proxy”
New-SPEnterpriseSearchServiceApplicationProxy -Name $SearchServiceProxyName -SearchApplication $SearchServiceName
}

$searchInstance = Get-SPEnterpriseSearchServiceInstance -local
$InitialSearchTopology = $ServiceApplication | Get-SPEnterpriseSearchTopology -Active
$SearchTopology = $ServiceApplication | New-SPEnterpriseSearchTopology

New-SPEnterpriseSearchAnalyticsProcessingComponent -SearchTopology $SearchTopology -SearchServiceInstance $searchInstance
New-SPEnterpriseSearchContentProcessingComponent -SearchTopology $SearchTopology -SearchServiceInstance $searchInstance
New-SPEnterpriseSearchQueryProcessingComponent -SearchTopology $SearchTopology -SearchServiceInstance $searchInstance
New-SPEnterpriseSearchCrawlComponent -SearchTopology $SearchTopology -SearchServiceInstance $searchInstance
New-SPEnterpriseSearchAdminComponent -SearchTopology $SearchTopology -SearchServiceInstance $searchInstance

set-SPEnterpriseSearchAdministrationComponent -SearchApplication $ServiceApplication -SearchServiceInstance $searchInstance

Remove-Item -Recurse -Force -LiteralPath $IndexLocation -ErrorAction SilentlyContinue
mkdir -Path $IndexLocation -Force

New-SPEnterpriseSearchIndexComponent -SearchTopology $SearchTopology -SearchServiceInstance $searchInstance -RootDirectory $IndexLocation

Write-Host -ForegroundColor Green “Activating new topology”
$SearchTopology.Activate()

Write-Host -ForegroundColor Yellow “Next call will provoke an error but after that the old topology can be deleted – just ignore it!”
$InitialSearchTopology.Synchronize()

Write-Host -ForegroundColor Yellow “Deleting old topology”
Remove-SPEnterpriseSearchTopology -Identity $InitialSearchTopology -Confirm:$false
Write-Host -ForegroundColor Green “Old topology deleted”
Write-Host -ForegroundColor Green “Done – start a full crawl and you are good to go (search).”

 

Advertisements

Author: "Sharepoint Thoughts"

I’m a Microsoft Certified IT Professional with 5+ Years Experience on SharePoint Technologies. Worked extensively on “SharePoint 2007”, “SharePoint 2010”, “SharePoint 2013” & “SharePoint 2016” on Implementation, Configuration & Troubleshooting several Projects.

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