The SearchHostController is related to the SearchServiceInstance. SearchHostController manages the search components that run on a server, and maintains a local repository for linguistic dictionaries.

The search components retrieve the linguistic dictionaries from the PrimaryHostController.

So it is important that Only Search nodes be made as PrimaryHostController in order for Custom Dictionary deployment jobs and dictionary imports to work successfully.

If search node {best practice recommendation is to make primary admin as PrimaryHostController} is not made as PrimaryHostController, you might see logs similar to below combined with failed dictionary deployment jobs

Search Linguistic Processing 65 Warning Dictionary deployment failed. SearchComponent: OWSTIMER.EXE, CorrelationId: 69657aa7-fa2a-45fd-983e-e0fa2f079e27, SearchServiceApplication: {cc53be81-7382-45f5-a719-a89891846f6f}, DictionaryName: Microsoft.UserDictionaries.EntityExtraction.Companies.Inclusions, Component:FlowExecution, FailureMessage: Deployment (flow:Microsoft.CustomDictionaryDeployment) for custom dictionary c866ca65-f095-4a16-9249-028d500f7703 did not complete successfully. Flow execution state was: Failed. Failure: Evaluation failure. An evaluation thread threw an exception. (Exception type: Microsoft.Ceres.Evaluation.DataModel.EvaluationException. Exception message: Evaluation failed in operator RepoWriter of type DictionaryRepositoryWriter), Cause: Microsoft.Ceres.ContentEngine.Services.ContentIntegrationEngine.FailCauseException: Evaluation failed in operator RepoWriter of type DictionaryRepositoryWriter.

You would also see when you try to import a dictionary through following mechanism Dictionary imports fail

$searchApp = Get-SPEnterpriseSearchServiceApplication

Import-SPEnterpriseSearchThesaurus -SearchApplication $searchApp -Filename ".\thesaurus.csv"

Expected: Dictionary imported successfully

Actual: PowerShell.exe (0x10214) 0x104B8 Search Linguistic Processing 129 Information Dictionary import cmdlet failed. SearchComponent: PowerShell.exe, CorrelationId: b3a69b93-a42e-4c63-b8fe-5f766848a64d, SearchServiceApplication: b3932f1a-d626-4907-9fe5-013363c3a229, DictionaryName: Microsoft.UserDictionaries.Thesaurus, Failure: Failed to import custom dictionary Microsoft.UserDictionaries.Thesaurus. Failure: Evaluation failure. An evaluation thread threw an exception. (Exception type: Microsoft.Ceres.Evaluation.DataModel.EvaluationException. Exception message: Evaluation failed in operator DictionaryRepositoryWriterLangInDependent of type DictionaryRepositoryWriter).. 018c8918-f800-0003-f09a-5dd0ac78ce01

In order to address these issues, please make sure search node is running as PrimaryHostController.

You can verify which node in the farm is running as PrimaryHostController, by running below command. You will see PrimaryHostController set to true on only one node in the FARM.

clip_image002

If that node {running PrimaryHostController} is not a search node, that could cause problems noted above.

To fix the issue make search’s Primary admin node as Primary Host Controller. You can verify which is Primary Admin node by going to CA | Manage Service Application | Search Service Application and you will see screen like below

clip_image004

Now go to that Search Admin node and make that as PrimaryHostController through below commands

clip_image006

Our best practice recommendation is to make Search Primary admin node as Primary Host Controller always.

POST BY: Srinivas Dutta [MSFT]