Coveo for Sitecore 5 is now available!

Upgrading from June 2017 (4.0.1461) to July 2017 (4.0.1547)

For the best Coveo for Sitecore experience, always follow the Leading Practices When Upgrading Coveo for Sitecore.

This section describes how to upgrade Coveo for Sitecore 4.0 from the June 2017 to the July 2017 release.

Step 1 - Upgrade Coveo Services

  1. Ensure you have installed the June 2017 release of Coveo Enterprise Search (CES 7.0.8996). For more details, see Upgrading CES.

  2. Ensure you have installed the March 2017 release of the Coveo Search API (8.0.1134).

Step 2 - Upgrade Coveo for Sitecore

Please, ensure that the Microsoft MVC security update MS14-059 is installed on every Sitecore host in your environment.

If you are using the Coveo Admin Service in secure mode, please read this notice before installing the package.

In the Coveo.SearchProvider.config file, make sure that the AdminServiceUri value uses the same hostname as the one specified in the certificate. If you are using a different hostname, such as localhost, you might get the error below when installing the package.

The remote certificate is invalid according to the validation procedure.
...
[WebException: The underlying connection was closed: Could not establish trust relationship for the SSL/TLS secure channel.]
...
[SecurityNegotiationException: Could not establish trust relationship for the SSL/TLS secure channel with authority 'localhost'.]
  1. Log into the Sitecore Desktop.

  2. Access the Installation Wizard (Sitecore Start Menu > Development Tools > Installation Wizard).
  3. Upload and install the Coveo for Sitecore XX 4.0 (1547).zip package. You can find it in Downloads.
  4. When prompted to overwrite files, click Yes to all.
  5. When prompted to overwrite items, select Overwrite, then click Apply to all.

    You might be prompted twice with this question. Simply select the Overwrite option and click Apply to all both times.

  6. Once the installation is completed, make sure that you restart both the Sitecore client and server.

Step 3 - Manually Update the Coveo Search Provider Configuration File

Step 1 - Upgrade Coveo for Sitecore

Please, ensure that the Microsoft MVC security update MS14-059 is installed on every Sitecore host in your environment.

  1. Log into the Sitecore Desktop.

  2. Access the Installation Wizard (Sitecore Start Menu > Development Tools > Installation Wizard).
  3. Upload and install the Coveo for Sitecore XX 4.0 (1547).zip package. You can find it in Downloads.
  4. When prompted to overwrite files, click Yes to all.
  5. When prompted to overwrite items, select Overwrite, then click Apply to all.

    You might be prompted twice with this question. Simply select the Overwrite option and click Apply to all both times.

  6. Once the installation is completed, make sure that you restart both the Sitecore client and server.

Step 2 - Manually Update the Coveo Search Provider Configuration File

Merging Your Modifications into the Configuration Files

Since upgrading Coveo for Sitecore modifies the Coveo Search Provider configuration files (Coveo.SearchProvider.config.example and Coveo.SearchProvider.Custom.config.example) with the latest fixes and enhancements, you need to manually merge these modifications into your current configuration files (Coveo.SearchProvider.config and Coveo.SearchProvider.Custom.config). This method allows you to keep your own customization intact, while still benefiting from the latest enhancements brought in the product. You can use a merge tool such as WinMerge to do that.

Coveo.SearchProvider.config

  1. In the factories node, after the factory element with the remoteListFactory id, add the following elements:

     <factory id="excludedFieldsFactory" type="Coveo.SearchProvider.FirstAvailableRemoteListFactory, Coveo.SearchProviderBase">
       <xpaths hint="list:AddXPath">
         <xpath name="Lucene">contentSearch/indexConfigurations/defaultLuceneIndexConfiguration/documentOptions//exclude[@hint='list:AddExcludedField']</xpath>
         <xpath name="Solr">contentSearch/indexConfigurations/defaultSolrIndexConfiguration/documentOptions//exclude[@hint='list:AddExcludedField']</xpath>
         <xpath name="Azure">contentSearch/indexConfigurations/defaultCloudIndexConfiguration/documentOptions//exclude[@hint='list:AddExcludedField']</xpath>
       </xpaths>
     </factory>
    
  2. In the coveoGetContextCoveoIndex element, at the end of the list of processors, add the following element:

     <!-- Processor used to fallback on an index when the current context item is not a valid Indexable. -->
     <processor type="Coveo.SearchProvider.Processors.FallbackOnFirstIndexWithSameDatabaseProcessor, Coveo.SearchProvider" />
    
  3. In the coveo element, after the cloudPlatformcommunicationFactory element, add the following element:

     <databasePropertyStore type="Sitecore.ContentSearch.Maintenance.IndexDatabasePropertyStore, Sitecore.ContentSearch">
       <Key>$(1)</Key>
       <Database>core</Database>
     </databasePropertyStore>
    
  4. Locate this configuration element:

     <exclude hint="list:AddExcludedField" ref="contentSearch/indexConfigurations/defaultLuceneIndexConfiguration/documentOptions//exclude[@hint='list:AddExcludedField']" factory="remoteListFactory"/>
    

    Replace it with the following element.

     <exclude hint="list:AddExcludedField" ref="mandatory, do not delete" factory="excludedFieldsFactory" />
    
  5. Locate these configuration elements:

     <coveoSyncMaster name="CoveoSyncMaster" ref="contentSearch/indexConfigurations/indexUpdateStrategies/syncMaster" />
     <coveoOnPublishEndAsync name="CoveoOnPublishEndAsync" ref="contentSearch/indexConfigurations/indexUpdateStrategies/onPublishEndAsync" />
    

    Replace them with the following elements:

     <coveoSyncMaster name="CoveoSyncMaster" type="Sitecore.ContentSearch.Maintenance.Strategies.SynchronousStrategy, Sitecore.ContentSearch">
       <param desc="database">master</param>
     </coveoSyncMaster><coveoOnPublishEndAsync name="CoveoOnPublishEndAsync" type="Sitecore.ContentSearch.Maintenance.Strategies.OnPublishEndAsynchronousStrategy, Sitecore.ContentSearch">
       <param desc="database">web</param>
       <CheckForThreshold>true</CheckForThreshold>
     </coveoOnPublishEndAsync>
    
  6. In the ContentSearch element, locate this configuration element:

     <coveoSyncMaster name="CoveoSyncMaster" ref="contentSearch/indexConfigurations/indexUpdateStrategies/syncMaster" />
               <coveoOnPublishEndAsync name="CoveoOnPublishEndAsync" ref="contentSearch/indexConfigurations/indexUpdateStrategies/onPublishEndAsync" />
    

    Replace it with the following elements:

     <coveoSyncMaster name="CoveoSyncMaster" type="Sitecore.ContentSearch.Maintenance.Strategies.SynchronousStrategy, Sitecore.ContentSearch">
                 <param desc="database">master</param>
               </coveoSyncMaster>
               <coveoOnPublishEndAsync name="CoveoOnPublishEndAsync" type="Sitecore.ContentSearch.Maintenance.Strategies.OnPublishEndAsynchronousStrategy, Sitecore.ContentSearch">
                 <param desc="database">web</param>
                 <CheckForThreshold>true</CheckForThreshold>
               </coveoOnPublishEndAsync>
    
  7. In the contentSearch element, between the indexConfigurations and the configuration elements, add the following element:

     <!-- The configuration element appears twice for these reasons:
         1. If no other search provider is defined, the type needs to be specified to create the configuration element.
         2. If an other search provider is configured already and overrides the type of the configuration element, Coveo indexes are
             added to the same configuration element as other indexes. -->
     <configuration type="Sitecore.ContentSearch.ContentSearchConfiguration, Sitecore.ContentSearch" />
    
  8. Locate this configuration element. It should appear twice in your file.

     <propertyStore ref="contentSearch/indexConfigurations/databasePropertyStore" param1="$(id)"/>
    

    Replace both occurrences with this element:

     <propertyStore ref="coveo/databasePropertyStore" param1="$(id)"/>