Prepare the Main Sitecore Content Manager for a Scaled Environment

Once you correctly built the whole Sitecore infrastructure, you may proceed to configure Coveo for Sitecore on your main content management instance (CM1).

Step 1: Configure an Additional Database Search Index

Sitecore suggests adding a pub database, as illustrated in Sitecore Infrastructure Setup. Whether this additional database is called pub or something else (e.g., web2), you must add a new index definition for it.

  1. On CM1, open the Coveo.SearchProvider.Custom.config file, depending on your Sitecore version:

    Sitecore 9 and 10

    The Coveo.SearchProvider.Custom.config file is located in the <SITECORE_INSTANCE_ROOT>\App_Config\Include\Coveo\ folder

    Sitecore 7 and 8

    The Coveo.SearchProvider.Custom.config file is located in the <SITECORE_INSTANCE_ROOT>\Website\App_Config\Include\Coveo\ folder.

    Important

    You shouldn’t modify the Coveo.SearchProvider.config file directly, as it may cause unexpected upgrade issues and loss of configuration.

  2. Inside the contentSearch/configuration/indexes element, add another <index> element as the last child by copy-pasting the code block for your Sitecore version.

    Note

    For Sitecore 9 and 10 instances, configuration patching to disable indexing on CD servers is included directly in the SITECORE 9 AND 10 code block below. For Sitecore 7 and 8 instances, this patching is handled further in the procedure, in a separate step (i.e., step 6).

    Sitecore 9 and 10

    Copy and paste the following content to create the new child of the <indexes> element:

    <index id="Coveo_pub_index" type="Coveo.SearchProvider.ProviderIndex, Coveo.SearchProvider" patch:before = "*[3]">
      <param desc="p_Name">$(id)</param>
      <configuration ref="coveo/defaultIndexConfiguration" />
      <locations hint="list:AddCrawler">
        <crawler name="ContentCrawler" type="Sitecore.ContentSearch.SitecoreItemCrawler, Sitecore.ContentSearch">
          <database>pub</database>
          <root>/sitecore/content</root>
          <stopOnError>true</stopOnError>
        </crawler>
        <crawler name="MediaLibraryCrawler" type="Sitecore.ContentSearch.SitecoreItemCrawler, Sitecore.ContentSearch">
          <database>pub</database>
          <root>/sitecore/media library/Files</root>
          <stopOnError>true</stopOnError>
        </crawler>
      </locations>
      <strategies hint="list:AddStrategy">
        <strategy ref="contentSearch/indexConfigurations/indexUpdateStrategies/coveoOnPublishEndAsyncPub"/>
        <strategy role:require="ContentDelivery" name="coveoOnPublishEndAsyncPub" type="Sitecore.ContentSearch.Maintenance.Strategies.ManualStrategy, Sitecore.ContentSearch">
          <param desc="database">
            <patch:delete />
          </param>
          <CheckForThreshold>
            <patch:delete />
          </CheckForThreshold>
        </strategy>
      </strategies>
      <propertyStore ref="coveo/databasePropertyStore" param1="$(id)"/>
      <enableItemLanguageFallback>false</enableItemLanguageFallback>
      <enableFieldLanguageFallback>false</enableFieldLanguageFallback>
    </index>

    Sitecore 7 and 8

    Copy and paste the following content to create the new child of the <indexes> element:

    <index id="Coveo_pub_index" type="Coveo.SearchProvider.ProviderIndex, Coveo.SearchProvider" patch:before = "*[3]">
      <param desc="p_Name">$(id)</param>
      <configuration ref="coveo/defaultIndexConfiguration" />
      <locations hint="list:AddCrawler">
        <crawler name="ContentCrawler" type="Sitecore.ContentSearch.SitecoreItemCrawler, Sitecore.ContentSearch">
          <database>pub</database>
          <root>/sitecore/content</root>
          <stopOnError>true</stopOnError>
        </crawler>
        <crawler name="MediaLibraryCrawler" type="Sitecore.ContentSearch.SitecoreItemCrawler, Sitecore.ContentSearch">
          <database>pub</database>
          <root>/sitecore/media library/Files</root>
          <stopOnError>true</stopOnError>
        </crawler>
      </locations>
      <strategies hint="list:AddStrategy">
        <strategy ref="contentSearch/indexConfigurations/indexUpdateStrategies/coveoOnPublishEndAsyncPub"/>
      </strategies>
      <propertyStore ref="coveo/databasePropertyStore" param1="$(id)"/>
      <enableItemLanguageFallback>false</enableItemLanguageFallback>
      <enableFieldLanguageFallback>false</enableFieldLanguageFallback>
    </index>
  3. Apply the following changes to the <index> element that you just added.

    1. The id attribute is set to Coveo_pub_index in the copied block. If your additional database isn’t named pub, change the id attribute value to reflect the name of your database (e.g., Coveo_web2_index).

    2. The text value of the <database> elements in the copied block is pub. If your additional database isn’t named pub, change the text value to reflect the name of your database (e.g., <database>web2</database>).

  4. Add the following <indexConfigurations> element as an immediate child of the <contentSearch> element:

    <indexConfigurations>
      <indexUpdateStrategies>
        <coveoOnPublishEndAsyncPub name="coveoOnPublishEndAsyncPub" type="Sitecore.ContentSearch.Maintenance.Strategies.OnPublishEndAsynchronousStrategy, Sitecore.ContentSearch">
          <param desc="database">pub</param>
          <CheckForThreshold>true</CheckForThreshold>
        </coveoOnPublishEndAsyncPub>
      </indexUpdateStrategies>
    </indexConfigurations>
  5. The text value of the <param> element in the block you just copied is pub. If your additional database isn’t named pub, change the text value to reflect the name of your database (e.g., <param desc="database">web2</param>).

    Important

    If you make changes to the <coveoOnPublishEndAsyncPub> element (i.e., to the element name or its name attribute value), ensure you match these changes in the child <strategy> element(s) of the <index> element you added earlier.

  6. (For Sitecore 7 and 8 only)

    You need to prepare a patch for the coveoOnPublishEndAsyncPub strategy to disable indexing on your CD servers.

    1. Open the <SITECORE_INSTANCE_ROOT>\Website\App_Config\Include\Coveo\SwitchMasterToWeb.Coveo.config.example file.

    2. Add the following <coveoOnPublishEndAsyncPub> element as an immediate child of the contentSearch/indexConfigurations/indexUpdateStrategies element:

      <coveoOnPublishEndAsyncPub name="coveoOnPublishEndAsyncPub">
        <param desc="database">
          <patch:delete />
        </param>
        <CheckForThreshold>
          <patch:delete />
        </CheckForThreshold>
      </coveoOnPublishEndAsyncPub>
      Important

      If you make changes to the <coveoOnPublishEndAsyncPub> element (i.e., to the element name or its name attribute value), ensure you match these changes in the child <strategy> element of the <index> element you added earlier.

      Note

      The SwitchMasterToWeb.Coveo.config file will be enabled on your CDs later in the scaling process.

  7. Save your changes.

Step 2: Rebuild the Search Index for the Additional Database

Your additional database is now properly configured and can be indexed by Coveo for Sitecore. Use the Coveo Command Center Indexing Manager to rebuild the newly created index.

Important

Your Sitecore items are indexed with clickable URI values matching a hostName value assigned to your content management instance. However, the clickable URI is also computed whenever a Coveo-powered search interface receives search results from the index to ensure that the intended content delivery instance is hit whenever a website visitor clicks on a search result.

Step 3: Configure the UseHostHeaderForRequestURL Setting

Under the hood, Coveo for Sitecore performs HTTP requests on its own. To ensure that these internal HTTP requests are targeting the expected endpoint, the aspnet:UseHostHeaderForRequestUrl setting must be set properly (see ASP.NET appSettings Element for details).

Note

The aspnet:UseHostHeaderForRequestUrl setting must be set to true when the Sitecore instance is deployed behind a network load balancer (NLB). Omitting this setting may cause URL-resolving issues.

Follow these steps to configure the setting on the CM1 instance:

  1. Open your web.config file.

  2. Inside configuration / appSettings, add the following element:

     <add key="aspnet:UseHostHeaderForRequestUrl" value="true" />
  3. Save and close the file.

Step 4: Configure the Farm Name on the Instance to Be Scaled

When scaling Sitecore instances, you need to set a Farm name to ensure all the Sitecore instances share the same resources. Setting a Farm name affects the names of the sources, field sets, security provider, and user identities. Instead of assigning them an individual name, you give them the same label. Follow the Assign a Farm Name to Coveo for Sitecore Resources guide to configure the CM1 instance.

Important

When choosing a Farm name different from the CM1 host name, you must rebuild your Coveo indexes (see Coveo for Sitecore Indexing Guide). Some resources, like the sources, need to be rebuilt to apply the name change. Skipping the rebuild would cause naming inconsistencies that would prevent queries and components from reaching the right resources.

What’s Next?

Now that you installed Coveo for Sitecore on your first content management instance, you may proceed either to:

What's next for me?